在了解格式和尺寸的同时使用python读取二进制文件

时间:2017-05-08 03:13:04

标签: python struct binary unpack endianness

我正在尝试读取包含一个格式为little endian的变量的二进制文件(float32)。

这个二进制文件应该给出一个带有尺寸的三维变量(8,480,1440)。 据说在另一个文件中没有标题。

经过努力阅读二进制文件并尝试在此处看到的不同解决方案后,我终于能够运行我的脚本了。但是输出并不像预期的那样(点数分布错误),这让我觉得在某些方面出了问题,虽然我不知道在哪里。

以下是运行但未给出预期结果的代码的最小示例:

filename=["CMORPH_3HLY_19980102"]
with open(filename[0], mode='rb') as file: 
        fileContent = file.read()

data=struct.unpack("f" * (len(fileContent) // 4), fileContent)

nvar  = 1                                    
ntim  = 8
nlat  = 480
mlon  = 1440
data_ok=np.array(data)

cmorph=data_ok.reshape((mlon,nlat,nvar*ntim)).transpose()

我猜问题来自于struct.unpack中的内容,但由于我对二进制格式和二进制文件不太熟悉,所以我不知道如何解决这个问题。 任何帮助和/或解释将不胜感激!

1 个答案:

答案 0 :(得分:0)

感谢stovfl,我解决了这个问题。以下是结合np.fromfilereshape

的代码
cmorph = np.fromfile(file,type=np.float32,count=nvar*ntim*nlat*mlon)).reshape((nvar*ntim,nlat,mlon))