使用python3读取二进制文件

时间:2019-05-07 17:27:15

标签: python python-3.6 binaryfiles

我试图在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))

关于我可能要去哪里的任何建议,将不胜感激。

2 个答案:

答案 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 iterfor循环中方便地执行此操作:

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)进行验证。