我有数百个文本文件,其数据格式为(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.imap
每this 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')