代码之家  ›  专栏  ›  技术社区  ›  notorious.no

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

  •  0
  • notorious.no  · 技术社区  · 6 年前

    我需要附加到一个二进制文件的开头或中间,这个文件可能很大(从100Mb到15Gb)。到目前为止,我看到的大多数答案要么不适合大文件,要么基本上完全重写文件。希望尽可能避免“写入新文件并替换旧文件”的方法。在我的头脑中,类似这样的东西应该能够添加数据,例如,第60个字节:

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

    但是,它并没有按预期工作,而是附加到文件的末尾。我仍然在想前一个例子是如何失败的,但是使用 io.BytesIO() 以同样的方式工作。希望我只是忽略了一些简单的事情。

    1 回复  |  直到 6 年前
        1
  •  1
  •   colidyre    6 年前

    a 明确地指 see documentation :

    “a”表示追加(在某些Unix系统上,这意味着所有写入都追加到文件的末尾,而不管当前的seek位置如何)

    作为filemode参数。但你不必使用 r+ 相反,这意味着打开文件并可以对其进行更新(读写):

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

    我仍然不确定Windows是否也是如此(文档中说) 在某些Unix系统上