用python读取二进制文件而不知道结构

时间:2017-07-29 14:04:58

标签: python arrays list binary decoding

我有一个包含8000个粒子位置的二进制文件。 我知道每个粒子值应该看起来像" -24.6151 ..." (我不知道我的程序给出的值的精度。我猜它是双精度(?)。

但是当我尝试用这段代码读取文件时:

In: with open('.//results0epsilon/energybinary/energy_00004.dat', 'br') as f:
    buffer = f.read()
    print ("Lenght of buffer is %d" % len(buffer))

    for i in buffer:
        print(int(i))

我得到了输出:

Lenght of buffer is 64000

10

168

179

43
...

我跳过了整个值列表,但是你可以看到这些值远远超出我的预期。我想我有一些解码错误。

我会感激任何帮助:)

1 个答案:

答案 0 :(得分:4)

您现在打印的是构成浮点数据的bytes。所以它作为数值没有意义。

当然,由于我们没有看到您的数据,因此没有100%肯定答案,但我会尝试猜测:

您需要读取8000个值,文件大小为64000.因此,您可能拥有double个IEEE值(每个8个字节)。如果它不是 IEEE,那么你就是干杯。

在这种情况下,您可以尝试以下方法:

import struct
with open('.//results0epsilon/energybinary/energy_00004.dat', 'br') as f:
    buffer = f.read()
    print ("Length of buffer is %d" % len(buffer))

    data = struct.unpack("=8000d",buffer)

如果数据被打印伪造,则可能是字节序问题。因此,请=8000<8000更改>8000

用于参考和打包/解包格式:https://docs.python.org/3/library/struct.html