将数据写入for循环中的不同行

时间:2016-01-31 10:55:41

标签: python

我有下一个代码,我想将数据从循环的第一部分打印/写入一行(txt.file)和第二循环的数据(i = 0到len(list))到下一个(i行)

这是代码:

transpose=open ('transpose_test.txt','w')
e=open('sorted_ms_dos_test.txt')
for  line in e:
        eid=line[4:10]
        for i,val in enumerate(unic):
            if val==eid and val==unic[0]: 
                transpose.write(line)     
                print(line)
            else:
                if val==eid and val==unic[0+i]:
                    transpose.write(line)
transpose.close()

其中: unic = ['82077 ', '82076 '](仅在这种情况下,真正的问题len(unic)可能超过20k

来自e的行看起来像:

1   82077 6.40
1   82076 7.22
2   82077 18.34
2   82076 16.74
3   82077 6.92
3   82076 7.53
4   82077 10.61
4   82076 12.05
5   82077 10.50
5   82076 10.92
6   82077 127.49
6   82076 106.18
7   82077 11.90
7   82076 13.94
8   82077 13.02
8   82076 14.68
9   82077 16.40
9   82076 15.59
10  82077 10.51
10  82076 11.57
11  82077 66.78
11  82076 64.70
12  82077 10.35
12  82076 11.28
我得到了这个:

  

1 82077 6.401 82076 7.222 82077 18.342 82076 16.743 82077 6.923 82076 7.534 82077 10.614 82076 12.055 82077 10.505 82076 10.926 82077 127.496 82076 106.187 82077 11.907 82076 13.948 82077 13.028 82076 14.689 82077 16.409 82076 15.5910 82077 10.5110 82076 11.5711 82077 66.7811 82076 64.7012 82077 10.3512 82076 11.28

我希望得到这个:

  

1 82077 6.40 2 82077 18.34 3 82077 6.92 4 82077 10.61 5 82077 10.50 6 82077 127.49 7 82077 11.90 8 82077 13.02 9 82077 16.40 10 82077 10.51 11 82077 66.78 12 82077 10.35#in one line

  

1 82076 7.22 2 82076 16.74 3 82076 7.53 4 82076 12.05 5 82076 10.92 6 82076 106.18 7 82076 13.94 8 82076 14.68 9 82076 15.59 10 82076 11.57 11 82076 64.70 12 82076 11.28#in the second线等等......

1 个答案:

答案 0 :(得分:0)

首先阅读所有行,按eid排序。之后,您可以在一个循环中编写输出:

from collections import defaultdict
lines_with_eid = defaultdict(list)
with open()'sorted_ms_dos_test.txt') as lines:
    for line in lines:
        lines_with_eid[line[4:10]].append(line.strip())

with open ('transpose_test.txt', 'w') as transpose:
    for val in unic:
        transpose.write(' '.join(lines_with_eid[val]) + '\n')