scipy.io.

FortranFile#

class scipy.io.FortranFile(filename, mode='r', header_dtype=<class 'numpy.uint32'>)[source]#

该文件对象用于 Fortran 代码中的未格式化顺序文件。

参数:
filename文件或字符串

打开文件对象或文件名。

mode{‘r’, ‘w’}, 可选

读写模式,默认值是“r”。

header_dtype数据类型,可选

标头的数据类型。大小和字节序必须与输入/输出文件相匹配。

备注

这些文件被分割成类型未指定的记录。每个记录的大小在开始时给出(虽然标头的大小是非标准的),且数据被写入磁盘时没有任何格式。支持 BACKSPACE 语句的 Fortran 编译器会写第二个大小副本,以便支持向后查询。

该类仅支持为记录写有两个大小的文件。它也不支持英特尔和 gfortran 编译器在记录大于 2GB 且使用 4 字节标头时用的子记录。

用 Fortran 编写的非格式化顺序文件示例可以这样写:

OPEN(1, FILE=myfilename, FORM='unformatted')

WRITE(1) myvariable

由于这种文件的格式是非常的,其内容依赖于编译器和计算机的字节序,因此建议谨慎。在 x86_64 上,已知 gfortran 4.8.0 和 gfortran 4.1.2 生成的文件有效。

考虑使用 Fortran 直接访问文件或来自较新 Stream I/O 的文件,因为 numpy.fromfile 可以轻松读取这些文件。

例子

若要创建一个未格式化的顺序 Fortran 文件

>>> from scipy.io import FortranFile
>>> import numpy as np
>>> f = FortranFile('test.unf', 'w')
>>> f.write_record(np.array([1,2,3,4,5], dtype=np.int32))
>>> f.write_record(np.linspace(0,1,20).reshape((5,4)).T)
>>> f.close()

若要读取此文件

>>> f = FortranFile('test.unf', 'r')
>>> print(f.read_ints(np.int32))
[1 2 3 4 5]
>>> print(f.read_reals(float).reshape((5,4), order="F"))
[[0.         0.05263158 0.10526316 0.15789474]
 [0.21052632 0.26315789 0.31578947 0.36842105]
 [0.42105263 0.47368421 0.52631579 0.57894737]
 [0.63157895 0.68421053 0.73684211 0.78947368]
 [0.84210526 0.89473684 0.94736842 1.        ]]
>>> f.close()

或者,用 Fortran

integer :: a(5), i
double precision :: b(5,4)
open(1, file='test.unf', form='unformatted')
read(1) a
read(1) b
close(1)
write(*,*) a
do i = 1, 5
    write(*,*) b(i,:)
end do

方法

close()

关闭该文件。

read_ints([dtype])

从文件中读取给定类型的一条记录,默认为整数类型(Fortran 中的 INTEGER*4)。

read_reals([dtype])

从文件中读取给定类型的一条记录,默认为浮点数(Fortran 中的 real*8)。

read_record(*dtypes, **kwargs)

从文件中读取给定类型的一条记录。

write_record(*items)

将一条记录(包括大小)写入文件中。