在不知道结构的情况下使用 python 读取二进制文件



我有一个包含 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
...

我跳过了整个值列表,但正如您所看到的,这些值与我的预期相去甚远。我想我有某种解码错误。

我将不胜感激任何形式的帮助:)

您现在打印的是组成浮点数据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

最新更新