我试图在python3中读取16位二进制文件,但出现以下错误
out = struct.unpack(“ h”,字节)
错误:解压缩需要2个字节的缓冲区
import struct
for line in file_read:
bytes = file_read.read(2)
out = struct.unpack("h", bytes)
file_write.write(str(out))
关于我可能要去哪里的任何建议,将不胜感激。
答案 0 :(得分:3)
您正在按行和按字节字符遍历文件。
for line in file_read: # read by line
bytes = file_read.read(2) # read by character
第一个寻求换行符(b'\n'
或b'\x0A'
),并且可能消耗任意数量的字节。这意味着您读取的字节对可能会偏移1,并且可能在文件末尾。
仅按字符对读取文件。您可以使用two-argument iter
在for
循环中方便地执行此操作:
for pair in iter(lambda: file_read.read(2), b''):
out = struct.unpack("h", pair)
file_write.write(str(out))
在Python 3.8中,您也可以使用assignment expression:
while pair := file_read.read(2):
out = struct.unpack("h", pair)
file_write.write(str(out))
答案 1 :(得分:1)
很可能file_read
是空的,或者在读取line
之后变空(正如@MisterMiyagi指出的那样,逐行读取二进制文件似乎不是一个好主意)。因此file_read.read
不读取任何内容或仅读取一个字节。您可以通过打印len(bytes)
进行验证。