根据第二个字段对文件的内容进行排序,例如
输入文件:
Jervie,12,M
Jaimy,11,F
Tony,23,M
Janey,11,F
输出文件:
Jaimy,11,F
Janey,11,F
Jervie,12,M
Tony,23,M
我们需要使用外部排序。
输入文件的大小可以为 4GB。内存为 1GB。
我使用了它,但它不起作用,因为它将所有内容都视为int
. 我也怀疑与外部排序的每一轮中的缓冲区大小有关。如何决定呢?
这仅使用整数对文件进行排序。
file = open("i2.txt","r")
temp_files = []
e = []
while True:
temp_file = tempfile.TemporaryFile()
e = list(islice(file,2))
if not e:
break
e.sort(key=lambda line: int(line.split()[0]))
temp_file.writelines(e)
temp_files.append(temp_file)
temp_file.flush()
temp_file.seek(0)
file.close()
with open('o.txt', 'w') as out:
out.writelines(imap('{}\n'.format, heapq.merge(*(imap(int, f) for f in temp_files))))
out.close()
我可以创建按第二个字段排序的临时文件,但是如何基于此合并它们?