我有一个非常大的二进制文件,名为file1.bin,我想创建一个文件file2.bin,它只保存file1.bin的第一个32kb文件。
所以我正在按如下方式阅读file1:
myArr = bytearray()
with open(r"C:\Users\User\file1.bin", "rb") as f:
byte = f.read(1)
for i in range(32,678):
myArr.extend(byte)
byte = f.read(1)
我的问题是:如何从myArr创建file2二进制文件?
我试过
with open(r"C:\Users\User\file2.bin", "w") as f:
f.write(myArr)
但结果是:
f.write(myArr)
TypeError: must be string or pinned buffer, not bytearray
答案 0 :(得分:4)
您需要以二进制写入模式(wb
)打开文件。
with open('file2.bin', 'wb') as f:
f.write(myArr)
此外,您从输入文件中读取的方式效率很低。 f.read()
允许您一次读取多个字节:
with open('file1.bin', 'rb') as f:
myArr = bytearray(f.read(32678))
将完全按照您的意愿行事。
答案 1 :(得分:0)
使用适当的标志打开文件,然后从1024字节的块中读取一个文件,并写入其他文件,如果剩余少于1024个字节,则按字节方式复制。
fin = open('file1.bin', 'rb')
fout = open('file2.bin', 'w+b')
while True:
b=fin.read(1024)
if b:
n = fout.write(b)
else:
while True:
b=fin.read(1)
if b:
n=fout.write(b)
else:
break
break