快速重新排列文本文件

时间:2014-03-18 09:43:41

标签: python multithreading text file-io parallel-processing

我编写了以下代码,以给定的顺序重写文本文件。此订单在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)

1 个答案:

答案 0 :(得分:1)

您应该将整个文件读入内存,并将dict num中的所有行指向list linenumgA在一开始的时候。然后,您可以在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}}。