将一个二进制文件追加到另一个二进制文件

8
我想将一个之前写好的二进制文件和一个新创建的二进制文件合并,实际上是将它们合并。这是我正在使用的示例代码:
with open("binary_file_1", "ab") as myfile:
    myfile.write("binary_file_2")

除了错误提示 "TypeError: must be string or buffer, not file" 之外,我确实想要做的就是把一个二进制文件添加到之前创建的二进制文件的末尾。

我尝试在 "myfile.write("binary_file_2", "wb") 中添加 "wb",但它并不喜欢这样做。


我怀疑你的代码会产生那个错误。你能发一下你的实际代码吗?请参考最小化、完整化和可验证示例 - Tim Pietzcker
3个回答

20
您需要实际打开第二个文件并阅读其内容:
with open("binary_file_1", "ab") as myfile, open("binary_file_2", "rb") as file2:
    myfile.write(file2.read())

太好了!成功了!非常感谢你! - Python_newbie
太好了,第一个文件事先也不需要存在,因此您可以从零开始。 - user7504939

8

从Python模块shutil中

import os
import shutil

WDIR=os.getcwd()
fext=open("outputFile.bin","wb")
for f in lstFiles:
    fo=open(os.path.join(WDIR,f),"rb")
    shutil.copyfileobj(fo, fext)
    fo.close()
fext.close()

首先,我们打开outputFile.bin二进制文件进行写入,然后使用shutil.copyfileobj(src, dest)循环遍历lstFiles中的文件列表,其中src和dest是文件对象。要获取文件对象,只需通过使用适当模式"rb"读取二进制文件名调用open即可。对于每个打开的文件对象,我们必须将其关闭。连接的文件也必须关闭。


这应该是被接受的答案,因为当前被接受的答案尝试在写入数据之前读取所有数据(这将对大文件造成问题)。 - chronos
这个答案的上下文管理器变体将是一个很棒的答案。 - undefined

1
for file in files:
    async with aiofiles.open(file, mode='rb') as f:
        contents = await f.read()
    if file == files[0]:
        write_mode = 'wb'  # overwrite file
    else:
        write_mode = 'ab'  # append to end of file

    async with aiofiles.open(output_file), write_mode) as f:
        await f.write(contents)

1
在你的代码中添加一些描述会更有帮助,逻辑比单纯的代码片段更加重要。 - Mathews Sunny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接