2

我有 .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模块进行读取,但我不明白如何将它与我的特定文件格式一起使用...有什么帮助吗?

4

1 回答 1

3

您需要知道每个字段中存储了什么struct的信息,以便模块理解每个字段。

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

您可能还需要弄清楚文件格式的字节顺序。如果没有明确命名,您需要进行一些试验,或者从上下文推断它会是什么(例如,Windows 文件格式几乎总是小端序)。

如果您只想解压缩前 4 个值,则读取正确的字节数(格式为 8)并将其struct.unpack与一组格式化字符一起传递给函数,以告知 struct 预期的类型。如果我们假设 little-endian 数据,并且前四个字段分别代表一个 unsigned int、一个 unsigned short 和两个 unsigned char,那么您将使用:

with open('something.cdr', 'rb') as data:
    x, x1, x2, x3 = struct.unpack('<IH2B', data.read(8))
于 2012-07-25T10:36:45.607 回答