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

时间:2012-07-25 10:02:51

标签: 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模块阅读,但我无法理解如何将其与我的特定文件格式一起使用...任何帮助?

1 个答案:

答案 0 :(得分:2)

您需要知道struct模块在​​每个字段中存储的信息,以了解每个字段。

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

您可能还需要弄清楚文件格式的endianness。如果未明确命名,则需要进行一些实验,或从上下文推断出它的内容(例如,Windows文件格式几乎总是小端)。

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

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