我需要附加到一个二进制文件的开头或中间,这个文件可能很大(从100Mb到15Gb)。到目前为止,我看到的大多数答案要么不适合大文件,要么基本上完全重写文件。希望尽可能避免“写入新文件并替换旧文件”的方法。在我的头脑中,类似这样的东西应该能够添加数据,例如,第60个字节:
with open('file.dat', 'ab') as f: f.seek(60) f.write(b'_hello_world_')
但是,它并没有按预期工作,而是附加到文件的末尾。我仍然在想前一个例子是如何失败的,但是使用 io.BytesIO() 以同样的方式工作。希望我只是忽略了一些简单的事情。
io.BytesIO()
a 明确地指 一 see documentation :
a
“a”表示追加(在某些Unix系统上,这意味着所有写入都追加到文件的末尾,而不管当前的seek位置如何)
一 作为filemode参数。但你不必使用 一 r+ 相反,这意味着打开文件并可以对其进行更新(读写):
一
r+
with open('file.dat', 'r+b') as f: f.seek(60) f.write(b"_hello_world_")
我仍然不确定Windows是否也是如此(文档中说) 在某些Unix系统上