【问题标题】:Text file Iterating, Slicing, breaking bigger lines into smaller lines of equal size文本文件迭代、切片、将较大的行拆分为相同大小的较小行
【发布时间】:2020-06-02 14:57:04
【问题描述】:

我是使用 Python 处理文本文件的新手。我有一个巨大的文本文件(200 万行)a.txt,如下所示:

1 0
34715 0 1 8 0 29 5 5 11 4 8 4 150 0 1
0
2200859 1 4 8 1 18 5 5 10 189 8 4 309 0 4 
0
749279 1 1 5 4 38 5 5 0 157 8 4 370 0 2106576 1 1 5 4 38 5 5 1 157 6 18 370 0  2140134 1 1 5 4 38 5 5 1 157 6 13 370 0  2140408 0 1 5 4 38 5 5 1 157 6 16 370 0  1
0
1149510 0 5 8 2 19 5 2 1 111 5 4 388 0  2
0
471429 0 1 6 0 29 5 5 11 4 8 18 414 0  2629646 0 1 6 0 29 5 5 11 4 8 4 414 0  1
0
48249 0 1 8 0 30 5 5 1 115 0 6 458 0  3
0
1515836 0 0 8 2 7 5 3 1 163 2 4 522 0  1516727 0 0 8 2 7 5 3 1 163 2 4 522 0  1516995 0 0 8 2 7 5 3 1 163 2 4 522 0
  • 第一行包含 0 1

  • 第 2 行包含 15 个数字,从 34715, 0, ... ,1 开始

  • 第三行只包含一个数字0

  • 第 4 行再次包含 15 个数字

  • 第 5 行再次只包含一个数字 0

  • 第 6 行包含 57 个数字

等等.... 我想要一个新的文本文件 b.txt,它看起来像这样:

1 0
34715 0 1 8 0 29 5 5 11 4 8 4 150 0 
1 0
2200859 1 4 8 1 18 5 5 10 189 8 4 309 0  
4 0
749279 1 1 5 4 38 5 5 0 157 8 4 370 0  
2106576 1 1 5 4 38 5 5 1 157 6 18 370 0  
2140134 1 1 5 4 38 5 5 1 157 6 13 370 0  
2140408 0 1 5 4 38 5 5 1 157 6 16 370 0 
1 0
1149510 0 5 8 2 19 5 2 1 111 5 4 388 0  
2 0
471429 0 1 6 0 29 5 5 11 4 8 18 414 0  
2629646 0 1 6 0 29 5 5 11 4 8 4 414 0  
1 0
48249 0 1 8 0 30 5 5 1 115 0 6 458 0  
3 0
1515836 0 0 8 2 7 5 3 1 163 2 4 522 0  
1516727 0 0 8 2 7 5 3 1 163 2 4 522 0  
1516995 0 0 8 2 7 5 3 1 163 2 4 522 0 

这个有

  • 第一行相同 0 1

  • 第 2 行包含 14 个数字,从 34715, 0, 1, ...., 0 开始

  • 第三行现在包含两个数字 1、0

  • 第 4 行包含 14 个数字

  • 5th 包含两个数字 4, 0

然后从第 6 行到第 9 行,每个包含 14 个数字

等等

我猜这可以通过两个步骤来实现-

  1. a.text 的较大行(长度 >1)的最后一个数字在 0 之前的下一行中移动,它在 b.text 中看起来像 1 0、4 0 等

  2. 在此之后,长度 > 14 的较大行将被分成更多行,行数将等于上述数字,即如果是 4 0,则每行将有 4 行(行)长度为 14。

示例 - a.txt 中的第 6 行包含 57 个数字,将被转换为 4 行,每行长度为 14,并且最后一个数字已移至下一行。

我尝试了一些方法,但没有成功

with open('words.txt','r+') as f, open("B.txt", "w") as b:
    for line in f:
      index = 0
      if line.count(' ') > 1:
        words = line.split(' ')
        temp = words[-1]

使用此代码,我可以获得最后几行较大的行,但是如何将它们添加到 0 之前的下一行中?在这之后如何做第二步?

【问题讨论】:

  • 将每一行拆分成一个单词列表。获取该列表的长度。如果小于 14,则继续下一行。否则,将其划分为长度为 14 的块(忽略任何剩余部分)。现在重新加入每个块并将其添加到列表中。该列表的长度给出了n 0 行,它包含的块给出了其他行。

标签: python text iteration slice


【解决方案1】:

我现在能够解决它。

f=open('sachin.txt','r')
lines=f.readlines()
new_file=open('updated.txt','w')
new_file.write(lines[0])
for i in range(1,len(lines)-1,2):
    l1=lines[i]
    l2=lines[i+1]
    l1.strip("\n")
    l2.strip("\n")
    l1=l1.split()
    l2=l2.split()
    l2.append(l1[-1])
    l2[0],l2[1]=l2[1],l2[0]
    temp=[]
    count=0
    j=0
    while j<(len(l1)):
        if count==13:
            temp.append(l1[j])
            new_temp=" ".join(temp)
            new_file.write(new_temp+'\n')
            count=0
            temp=[]
            j+=1
        else:
            temp.append(l1[j])
            j+=1
            count+=1
    l2=" ".join(l2)
    new_file.write(l2+"\n")
new_file.close()            
f.close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 2013-04-23
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多