无法从 python 中的二进制文件中读取正确的值

Not able to read the correct values from a binary file in python

我创建了双精度(数据类型)值并将其写入二进制文件。该文件不包含任何 headers。它只是使用 Qt 中的 QDataStream 将原始数据写入文件。我正在尝试读取 python(版本 3.6.9)脚本中的值,但是,在 python 脚本中读取的数据不正确。在 C++ 中读取相同的文件时会给出正确的数据值。我的 python 代码是:

with open("cont_points.dat", mode='rb') as f:
    controlP=np.fromfile(f,dtype=np.double)
print(controlP)

最后的 print 语句给出了以下结果,我假设这些结果全为零:

[2.11855e-320 1.04347e-320 0.00000e+000 3.03865e-319 2.11855e-320
 2.05531e-320 0.00000e+000 3.03865e-319 1.61263e-320 1.04347e-320
 ... ... ...
 2.05531e-320 0.00000e+000 3.03865e-319 2.05531e-320 1.04347e-320
 0.00000e+000 3.03865e-319 2.05531e-320 2.05531e-320 0.00000e+000
 3.03865e-319]

文件中的数据为[-4, 3, 0, 1, -4, 4, 0, 1, -3.5, 3, 0, 1,...等]。总共有 136 个值我想阅读。当我在 C++ 中读取相同的文件时得到正确的结果,我认为问题出在我的 python 代码中。谁能告诉我我做错了什么?

问题在于文件中数据的字节序。 QDataStream 默认使用大端字节顺序。在您的系统上,numpy 使用小端。您可以使用 dtype='>f8'.

读取文件

这将生成一个具有 non-native 字节顺序的数组(controlP.dtype.isnative 将是 False)。根据接下来发生的情况,您可能希望先调用 .byteswap() 以获得更好的性能。另见 this page in the numpy docs.