将两个二进制文件合并为第三个二进制文件



我正在尝试将两个二进制文件合并到Python中的第三个二进制文件。我的代码:

input1 = input2 = ""
input1 = open('input1.bin').read()
input2 = open('input2.bin').read()
input1 += input2 
with open('Output.bin', 'w') as fp:
fp.write(input1)

这段代码没有给我任何错误,但这没有生成预期的输出。

就像,如果我编写批处理命令来合并文件:

copy /b input1.bin+input2.bin Output.bin

此命令生成大小为 150KB 的Output.bin,而早期的 python 命令给我的输出文件大小为 151KB。

我也试过这个:

with open('Output.bin', 'wb') as fp:
fp.write(input1)

即使用二进制模式编写,但这给了我错误:

TypeError: a bytes-like object is required, not 'str'

正确的过程是什么?


将此引用为先前的错误:类型错误:在 Python3 中写入文件时,需要类似字节的对象,而不是"str"

此解决方案不起作用


使用 Python 3.7

您收到此错误的原因是(TypeError:在 Python3 中写入文件时需要类似字节的对象,而不是"str"(是因为:
您在文本模式下读取文件(这是默认模式(,因此 input1 和 input2 变成了字符串,您尝试以二进制模式将它们写回(您需要 input1 是类似字节的对象(。一种方法是以二进制模式读取文件本身,如下所示。

# Try reading the file in binary mode and writing it back in binary 
# mode. By default it reads files in text mode  
input1 = open('input1.bin', 'rb').read()
input2 = open('input2.bin', 'rb').read()
input1 += input2 
with open('Output.bin', 'wb') as fp:
fp.write(input1)

我相信这应该打开两个输入文件,以块的形式读取它们,然后写入一个输出文件:

from shutil import copyfileobj
from io import DEFAULT_BUFFER_SIZE
with open('input1.bin', 'rb') as input1, open('input2.bin', 'rb') as input2, open('output.bin', 'wb') as output:
copyfileobj(input1, output, DEFAULT_BUFFER_SIZE)
copyfileobj(input2, output, DEFAULT_BUFFER_SIZE)

最新更新