문제

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