如何有效删除大文件中间的一行?

时间:2012-11-05 07:47:53

标签: python file python-2.7

  

可能重复:
  Fastest Way to Delete a Line from Large File in Python
  How to edit a line in middle of txt file without overwriting everything?

我知道我可以将每一行读入一个列表,删除一行,然后再写回列表。

但是文件很大,有没有办法删除文件中间的部分,而不需要重写整个文件?

1 个答案:

答案 0 :(得分:5)

我不知道是否有办法更改文件,即使使用低级文件系统命令,但您不需要将其加载到列表中,因此您可以在没有大内存占用的情况下执行此操作:

with open('input_file', 'r') as input_file:
    with open('output_file', 'w') as output_file:
        for line in input_file:
            if should_delete(line):
                pass
            else:
                output_file.write(line)

这假定您要删除的部分是文本文件中的一行,而should_delete是一个确定是应该保留还是删除该行的函数。可以轻松地将其更改为使用二进制文件,或者使用计数器而不是函数。

编辑:如果您正在处理二进制文件,您知道要删除的确切位置,并且它不太靠近文件的开头,您可以对其进行优化稍微使用io.IOBase.truncate(请参阅http://docs.python.org/2/library/io.html#io.IOBase)。但是,如果分析器指示您确实需要优化到这个程度,我只建议继续这样做。