質問

I have a very large binary file called file1.bin and I want to create a file, file2.bin, that holds only the first 32kb of file1.bin.

So I'm reading file1 as follows:

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)

My question is: How do I proceed from here to create the file2 binary file out of myArr?

I tried

with open(r"C:\Users\User\file2.bin", "w") as f:
f.write(myArr)

but this results in:

f.write(myArr)
TypeError: must be string or pinned buffer, not bytearray
役に立ちましたか?

解決

You need to open the file in binary write mode (wb).

with open('file2.bin', 'wb') as f:
    f.write(myArr)

Also, the way you are reading from the input file is pretty inefficient. f.read() allows you to read more than one byte at a time:

with open('file1.bin', 'rb') as f:
    myArr = bytearray(f.read(32678))

Will do exactly what you want.

他のヒント

Open files with appropriate flags, then read from one in blocks of 1024 bytes and write to other, if less than 1024 bytes are remaining, copy byte-wise.

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top