【问题标题】:How to effectively remove a line in the middle of a large file? [duplicate]如何有效地删除大文件中间的一行? [复制]
【发布时间】:2012-11-05 07:47:53
【问题描述】:

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

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

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

【问题讨论】:

标签: python file python-2.7


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    相关资源
    最近更新 更多