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

时间:2015-05-18 15:32:39

标签: python numpy scipy

我正在尝试读取一个标题为整数的fortran文件,然后将实际数据作为32位浮点数。使用numpy的fromfile('mydatafile', dtype=np.float32)它将整个文件作为float32读入,但我需要在int32中为我的输出文件添加标题。使用scipy的FortranFile读取头文件:

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

但是当我这样做时:

data = f.read_reals(dtype=np.float32)

它返回一个空数组。我知道它不应该是空的,因为使用numpy的fromfile它会读取所有数据。奇怪的是,scipy方法适用于我的数据集中的其他文件,但不适用于此。也许我不理解numpy和scipy这两种读取方法中的每一种之间的区别。当使用任一方法读入文件时,有没有办法隔离标题(dtype=np.int32)和数据(dtype=np.float32)?

2 个答案:

答案 0 :(得分:4)

np.fromfile采用“count”参数,该参数指定要读取的项目数。如果您事先知道标头中的整数数量,那么在没有任何类型转换的情况下执行所需操作的简单方法就是将标头读取为整数,然后将其余部分作为浮点数读取:

NaN

答案 1 :(得分:0)

@DavidTrevelyan有一个很好的方式。另一种方法是将fortranfile包与struct结合使用。这两种方式都不是理想的,但后来也不是scipy FortranFile

至少这样你可以阅读混合型数据。这是一个例子:

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是标准的,(联合国)包格式为here