首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中读取二进制文件中的整数

在Python中读取二进制文件中的整数
EN

Stack Overflow用户
提问于 2009-07-22 14:48:40
回答 7查看 156.6K关注 0票数 90

我正在尝试用Python语言读取BMP文件。我知道前两个字节表示BMP公司。接下来的4个字节是文件大小。当我执行时:

代码语言:javascript
复制
fin = open("hi.bmp", "rb")
firm = fin.read(2)  
file_size = int(fin.read(4))  

我得到了:

ValueError:基数为10的int()的文本无效:'F#\x13‘

我想要做的是将这四个字节作为整数读取,但Python似乎将它们作为字符读取并返回一个字符串,该字符串无法转换为整数。我如何才能正确地执行此操作?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-07-22 06:59:55

read方法以字符串形式返回一个字节序列。要将字符串字节序列转换为二进制数据,请使用内置的struct模块:http://docs.python.org/library/struct.html

代码语言:javascript
复制
import struct

print(struct.unpack('i', fin.read(4)))

注意,unpack总是返回一个元组,所以struct.unpack('i', fin.read(4))[0]会给出您想要的整数值。

您可能应该使用格式字符串'<i' (<是表示小端字节顺序和标准大小和对齐方式的修饰符-默认使用平台的字节排序、大小和对齐方式)。根据BMP格式规范,字节应按Intel/little-endian字节顺序写入。

票数 130
EN

Stack Overflow用户

发布于 2012-07-30 05:51:49

另一种不使用“struct.unpack()”的方法是使用NumPy

代码语言:javascript
复制
import numpy as np

f = open("file.bin", "r")
a = np.fromfile(f, dtype=np.uint32)

“‘dtype”表示数据类型,可以是int#、uint#、float#、complex#或用户定义的类型。参见numpy.fromfile

我个人更喜欢使用NumPy来处理数组/矩阵数据,因为它比使用Python列表快得多。

票数 57
EN

Stack Overflow用户

发布于 2017-05-09 05:33:15

从Python开始,您也可以使用from_bytes原生3.2+方法来完成此操作:

代码语言:javascript
复制
file_size = int.from_bytes(fin.read(2), byteorder='big')

请注意,此函数要求您指定数字是以高字节顺序格式编码还是以低字节顺序格式编码,因此您必须确定字节顺序以确保其正常工作。

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

https://stackoverflow.com/questions/1163459

复制
相关文章

相似问题

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