Python:使用numpy或scipy读取Fortran二进制文件

2024-05-19 05:06:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图读取一个fortran文件,其中的头是整数,而实际数据是32位浮点。使用numpy的fromfile('mydatafile', dtype=np.float32)它在整个文件中读取为float32,但是我需要在int32中为输出文件提供头。它使用scipy的FortranFile读取标题:

f = FortranFile('mydatafile', 'r')
headers = f.read_ints(dtype=np.int32)

但当我这么做的时候:

^{pr2}$

它返回一个空数组。我知道它不应该是空的,因为使用numpy的fromfile它会读取所有的数据。奇怪的是,scipy方法适用于我数据集中的其他文件,但这一个却不行。也许我不明白numpy和scipy的两种读取方法的区别。有没有一种方法可以在用任何一种方法读取文件时隔离头(dtype=np.int32)和数据(dtype=np.float32)?在


Tags: 文件数据方法numpynp整数scipy浮点
2条回答

np.fromfile接受一个“count”参数,该参数指定要读取多少项。如果事先知道头中的整数个数,那么在不进行任何类型转换的情况下,一个简单的方法就是将头作为整数读取,然后将文件的其余部分作为浮点读取:

with open('filepath','r') as f:
    header = np.fromfile(f, dtype=np.int, count=number_of_integers)
    data = np.fromfile(f, dtype=np.float32)

@davidtreveyan有一个非常好的方法。另一种方法是将fortranfile包与struct结合使用。但{scipy都不是理想的。在

至少用这种方法可以读取混合类型的数据。下面是一个例子:

from fortranfile import FortranFile
from struct import unpack

with FortranFile(to_open) as fh:
    dat = fh.readRecord()
    val_list = unpack('=4i20d'.format(ln), dat)

您可以使用pip install fortranfile安装它。struct是标准的,(un)pack格式是here。在

相关问题 更多 >

    热门问题