使用stru读取python3.6中的结构化二进制数据

2024-09-30 14:28:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我真的试着用很多方法来寻找这个疑问,但是也许因为我从来没有使用过二进制文件,所以我不知道用什么关键字来搜索相似的东西来帮助我。所以我才来问你。在

所以,我有一个文件:

path = 'myPath/file.pd0'
in_file = open(path, "rb")
read_file = in_file.read()
type(read_file) 

当我试图检查read_文件中的内容时,我得到:

^{pr2}$

read_文件的类型是字节。当我尝试使用struct时,因为它是人们建议的函数,我得到了以下错误:

import struct
struct.unpack('hhl', read_file[0:30])

error: unpack requires a buffer of 16 bytes

不管我得到什么fmt解包都需要一个n字节的缓冲区。在

我尝试读取的文件结构定义如下:

页眉 (6字节+[2 x数据类型数量])

固定引线数据 (60字节)

可变引线数据 (66字节)

相关幅度 (每个深度单元2个字节+4个字节)

你知道我如何开始使用struct或类似的python来读取这些字节吗?在

谢谢


Tags: 文件数据path方法inread字节二进制
1条回答
网友
1楼 · 发布于 2024-09-30 14:28:33

unpack()需要的字节数是其第一个参数所描述格式的确切长度。 格式字符串'hhl'描述了16个字节的数据(在您的机器上,请参见下文),因此您必须传递一个16字节的字符串。 如果只想解析部分字节,可以执行以下操作:

fmt = 'hhl'
size = struct.calcsize(fmt)
struct.unpack(fmt, data[:size])

另外,格式字符串没有byte order, size and alignment specifier。默认情况下,它被假定为“本机”。这意味着您的代码依赖于系统,这可能不是解析文件格式所需要的。 文件的不同部分可能需要不同的对齐方式。在

相关问题 更多 >