Python - 读取/解析二进制文件

标签 python struct numpy binaryfiles

我有 .dat 文件,我正在尝试用 python 读取它。文件格式为:

1.1 CDR description1 
Field   length(bytes)   Offset 
x   4            0
x1  2            4
x2  1            6
x3  1            7
......
......
......
x4  16          210 
x5  4           226 
x6  70          230
Total length of information     300

这些是 CDR 记录,我正在尝试使用 struct 模块进行读取,但我无法理解如何将其与我的特定文件格式一起使用...有帮助吗?

最佳答案

您需要知道每个字段中存储了哪些类型信息,struct 模块才能理解每个字段。

例如,偏移量 0 处的第一个字段长 4 个字节,这意味着它可以是 int(范围从 -2,147,483,648 到 +2,147,483,647),也可以是 unsigned int 相反(范围从 0 到 4,294,967,295)。它也可以是单精度 float 。

您可能还需要找出 endianness您的文件格式。如果没有明确命名,您需要进行一些实验,或者从上下文推断它是什么(例如,Windows 文件格式几乎总是小端)。

如果您只想解压前 4 个值,则读取正确的字节数(格式为 8)并将其与一组格式字符一起传递给 struct.unpack 函数告诉结构体期望什么类型。如果我们假设小端数据,并且前四个字段分别表示一个无符号整型、一个无符号短整型和两个无符号字符,则您可以使用:

with open('something.cdr', 'rb') as data:
    x, x1, x2, x3 = struct.unpack('<IH2B', data.read(8))

关于Python - 读取/解析二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11647306/

相关文章:

python - 从 numpy 数组绘制直方图

arrays - 将一维字符串转换为多维数组 - Numpy

python - 连接转换网络的两个输出

swift - 将结构数组保存到 NSUserDefault Swift 3?

python - Flask 框架中的数据库连接问题

Golang RethinkDB ChangeFeed 结构

c++ - 在 n-ary 树中创建/访问节点时内存泄漏

python - 在 xarray 中 apply_ufunc 之后将维度移动到原始顺序?

python - 初学者应该如何完成编程任务?

python - 如何管理创建、添加数据和显示多个 matplotlib 图形?