我需要附加到二进制文件的开头或中间,并且该文件可能很大(从100Mb到15Gb的任何地方)。到目前为止,我看到的大多数答案要么都不容纳大文件,要么基本上完全重写了文件。希望尽可能避免“写入新文件并替换旧文件”方法。在我的脑海中,这样的事情应该能够从第60个字节中添加数据:
with open('file.dat', 'ab') as f:
f.seek(60)
f.write(b'_hello_world_')
但是,它不能按预期运行,而是附加到文件末尾。仍然试图绕过前面的示例如何失败,但是使用io.BytesIO()
的工作方式相同。希望我只是忽略一些简单的事情。
答案 0 :(得分:1)
文件模式参数a
明确表示要在行see documentation的末尾 a 添加文本:
和'a'用于追加(在某些Unix系统上,这意味着所有写操作都追加到文件末尾,而不管当前的查找位置如何)
因此,如果您将a
用作文件模式参数,则搜索无济于事。但是您不必使用a
。只需使用r+
即可,这意味着可以打开文件并进行更新(读和写):
with open('file.dat', 'r+b') as f:
f.seek(60)
f.write(b"_hello_world_")
我仍然不确定Windows是否也是这种情况(文档说“ 在某些Unix系统上”)。