use*_*627 0 python file python-2.7
我知道我可以将每行读入列表,删除一行,然后将列表写回.
但是文件很大,有没有办法删除文件中间的一个部分,而不需要重写整个文件?
我不知道是否有一种方法可以更改文件,即使使用低级文件系统命令,但您不需要将其加载到列表中,因此您可以在没有大量内存占用的情况下执行此操作:
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)
Run Code Online (Sandbox Code Playgroud)
这假定您要删除的部分是文本文件中的一行,并且该should_delete函数确定是应该保留还是删除该行.可以轻松地将其更改为使用二进制文件,或者使用计数器而不是函数.
编辑: 如果您正在处理二进制文件,您知道要删除的确切位置,并且它不太靠近文件的开头,您可以稍微优化它io.IOBase.truncate(请参阅http:// docs. python.org/2/library/io.html#io.IOBase).但是,如果分析器表明您确实需要优化到这个程度,我只建议继续这样做.