将数据添加到大文件的开头或中间

时间:2018-10-18 12:41:28

标签: python file io large-files

我需要附加到二进制文件的开头或中间,并且该文件可能很大(从100Mb到15Gb的任何地方)。到目前为止,我看到的大多数答案要么都不容纳大文件,要么基本上完全重写了文件。希望尽可能避免“写入新文件并替换旧文件”方法。在我的脑海中,这样的事情应该能够从第60个字节中添加数据:

with open('file.dat', 'ab') as f:
    f.seek(60)
    f.write(b'_hello_world_')

但是,它不能按预期运行,而是附加到文件末尾。仍然试图绕过前面的示例如何失败,但是使用io.BytesIO()的工作方式相同。希望我只是忽略一些简单的事情。

1 个答案:

答案 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系统上”)。