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

问题描述 投票:0回答:1

我正在尝试读取包含一个格式为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里面的内容,但由于我不太熟悉二进制格式和二进制文件,我不知道如何解决这个问题。任何帮助和/或解释将不胜感激!

python struct binary unpack endianness
1个回答
0
投票

感谢stovfl,我解决了这个问题。这是结合了np.fromfilereshape的代码。

cmorph = np.fromfile(file,type=np.float32,count=nvar*ntim*nlat*mlon)).reshape((nvar*ntim,nlat,mlon))
© www.soinside.com 2019 - 2024. All rights reserved.