首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用python3读取二进制文件

使用python3读取二进制文件
EN

Stack Overflow用户
提问于 2019-05-07 17:27:14
回答 2查看 233关注 0票数 2

我试图在python3中读取一个16位二进制文件,并得到以下错误

out = struct.unpack("h",字节) 错误:解包需要一个2字节的缓冲区

代码语言:javascript
复制
import struct
for line in file_read:
    bytes = file_read.read(2)
    out = struct.unpack("h", bytes)
    file_write.write(str(out))

任何关于我可能出错的建议都会很感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-07 17:36:18

您正在按行和字节字符遍历您的文件。

代码语言:javascript
复制
for line in file_read:  # read by line
    bytes = file_read.read(2)  # read by character

第一种方法是寻找换行符(b'\n',又名b'\x0A'),并可能消耗任意数量的字节。这意味着字节对的读取很可能被1所抵消,可能在文件的末尾。

只通过字符对读取您的文件。您可以使用iterfor循环中方便地执行此操作:

代码语言:javascript
复制
for pair in iter(lambda: file_read.read(2), b''):
    out = struct.unpack("h", pair)
    file_write.write(str(out))

在Python3.8中,您也可以使用赋值表达式

代码语言:javascript
复制
while pair := file_read.read(2):
    out = struct.unpack("h", pair)
    file_write.write(str(out))
票数 3
EN

Stack Overflow用户

发布于 2019-05-07 18:11:37

很可能file_read是空的,或者在读取line之后变得空(正如@MisterMiyagi所指出的,逐行读取二进制文件似乎不是一个好主意)。所以file_read.read什么也不读,或者只读一个字节。您可以通过打印len(bytes)来验证它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56027714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档