Python - 读取和删除文件的顶行而不将其加载到内存中

时间:2014-02-20 14:35:10

标签: python memory-management large-files mergesort

我需要合并每个大约150 MB的文本文件, 和一起将达到约5GB

问题是我不能使用readlines(),使用readlinesort, 因为最后一步需要将5GB加载到内存中,并且只需要

for line1 in file1, line2 in file2:
    while( line1 & line2 )...

命令,我不能告诉python只获取文件1的下一行,并保留文件2的行,因此无法进行合并排序

我读了一些关于在readlines()上设置readbuffer非常低的东西,只将一行加载到内存中,但是我无法从文件中删除第一行

是否有任何其他内存有效的方法来获取文件的第一行 并删除它, 或者是否有一个可用的功能来合并两个文本文件?

1 个答案:

答案 0 :(得分:1)

  

命令,我不能告诉python只获取文件1的下一行,并保留文件2的行,因此无法进行合并排序

不,你可以。

line1 = file1.readline()
line2 = file2.readline()
while file1_not_at_end and file2_not_at_end:
    if line1 < line2:
        file3.write(line1)
        line1 = file1.readline()
    else:
        file3.write(line2)
        line2 = file2.readline()

 # merge file 1 into file 3
 # merge file 2 into file 3