0

可能重复:
在 Python 中从大文件中删除一行的最快方法
如何在不覆盖所有内容的情况下编辑 txt 文件中间的一行?

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

但是文件很大,有没有办法把文件中间的一部分去掉,不用重写整个文件?

4

1 回答 1

6

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

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 )。但是,我只建议在分析器表明您确实需要优化到这种程度时才进行此操作。

于 2012-11-05T08:07:16.250 回答