在知道格式和维度的情况下使用 python 读取二进制文件

Read binary using python while knowing format and dimension

我正在尝试读取一个二进制文件 (float32),其中包含一个格式为小端格式的变量。

这个二进制文件应该给出一个维度为 (8, 480, 1440) 的 3d 变量。 据说没有 header,因为它在另一个文件中给出。

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

这是代码的一个最小示例,运行 但没有给我预期的结果:

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 里面,但是,由于我对二进制格式和一般的二进制文件不是很熟悉,所以我不知道如何解决这个问题。 任何帮助 and/or 解释将不胜感激!

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

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