我试图在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))任何关于我可能出错的建议都会很感激。
发布于 2019-05-07 17:36:18
您正在按行和字节字符遍历您的文件。
for line in file_read: # read by line
bytes = file_read.read(2) # read by character第一种方法是寻找换行符(b'\n',又名b'\x0A'),并可能消耗任意数量的字节。这意味着字节对的读取很可能被1所抵消,可能在文件的末尾。
只通过字符对读取您的文件。您可以使用iter在for循环中方便地执行此操作:
for pair in iter(lambda: file_read.read(2), b''):
out = struct.unpack("h", pair)
file_write.write(str(out))在Python3.8中,您也可以使用赋值表达式:
while pair := file_read.read(2):
out = struct.unpack("h", pair)
file_write.write(str(out))发布于 2019-05-07 18:11:37
很可能file_read是空的,或者在读取line之后变得空(正如@MisterMiyagi所指出的,逐行读取二进制文件似乎不是一个好主意)。所以file_read.read什么也不读,或者只读一个字节。您可以通过打印len(bytes)来验证它。
https://stackoverflow.com/questions/56027714
复制相似问题