在Python 2.7中合并数百个按2个键排序的文件

时间:2016-05-26 05:19:13

标签: python python-2.7 sorting

我有数百个文本文件,其数据格式为(id1,id2,value):

1050 20482 25
9582 92883 48
2750275 28032 3

每个文本文件中的数据按id1排序,然后按id2排序。这些字段是以' \ n'分隔的制表符。在每一行的末尾。它很大:每个文件有500,000行,并且数百个文件无法合并到内存中。 [我自己生成文本数据文件,因此如果能让事情变得更容易,我可以更改每个文件的格式或行数。]

Heapq.merge()在Python 3.5中有一个关键功能,但是afaik,Python 2.7中没有任何功能。

在Python 2.7中,将这些数百个已排序文件合并为一个大文本文件的有效方法是什么,格式为(id1 id2 value),数据按id1排序,然后按id2排序?

注意:我不知道为什么,但是Python将数字排序为字符串,所以我不得不强迫它解释为数字。为了解决这个问题,我使用itertools.imapthis answer

infiles = ['file1.txt','file2.txt',...,'file592.txt']
files = [open(fn) for fn in infiles]
with contextlib.nested(*files):
    with open('Results.txt', 'w') as f:
    #f.writelines(heapq.merge(*files))  <<<--- the standard way
    for line in map(str, heapq.merge(*(itertools.imap(int, file) for file in files))): #<<<--- forces ids to be sorted as integers 
        f.write(line+'\n')

0 个答案:

没有答案