我编写了以下代码,以给定的顺序重写文本文件。此订单在gA
中指定。 gA
是一个列表:[[fN0,value0],[fN1,value1] ...]
。我按值对这个列表进行了排序,并希望写出尊重这个顺序。
我的代码工作正常,但我的输入速度非常慢(我输入的行数为50米,处理它需要2个月)。因此,我正在寻找方法来固定这些代码。任何想法都是受欢迎的。
for k in gA:
fN = k[0]
for lineNum, line in enumerate(slicedFile,start=0):
num, restOfLine = line.split('\t',1)
if num == fN:
out.write(line)
inp.seek(0)
答案 0 :(得分:1)
您应该将整个文件读入内存,并将dict
num
中的所有行指向list
line
个num
个gA
在一开始的时候。然后,您可以在dict
中迭代一次,然后打印from collections import defaultdict
lines = defaultdict(list)
for line in slicedFile:
num, restOfLine = line.split('\t', 1)
lines[num].append(line)
for fN, dummy in gA:
for line in lines[fN]:
out.write(line)
:
defaultdict
注意:我只是使用defaultdict
来缩短代码。如果在这样的list
中使用了不存在的元素,它会自动创建(在本例中为.append()
),因此我可以在元素上调用{{1}}。