scipy.io.
Fortran文件#
- class scipy.io.FortranFile(filename, mode='r', header_dtype=<class 'numpy.uint32'>)[源代码][源代码]#
用于Fortran代码中未格式化顺序文件的文件对象。
- 参数:
- 文件名文件或字符串
打开文件对象或文件名。
- 模式{‘r’, ‘w’}, 可选
读写模式,默认是 ‘r’。
- header_dtypedtype, 可选
头文件的数据类型。大小和字节序必须与输入/输出文件匹配。
方法
close()关闭文件。
read_ints([dtype])从文件中读取给定类型的记录,默认为整数类型(Fortran中的``INTEGER*4``)。
read_reals([dtype])从文件中读取给定类型的记录,默认为浮点数(Fortran中的``real*8``)。
read_record(*dtypes, **kwargs)从文件中读取给定类型的记录。
write_record(*items)将记录(包括大小)写入文件。
注释
这些文件被分成未指定类型的记录。每个记录的大小在开始时给出(尽管这个头的大小不是标准的),数据被写入磁盘而不进行任何格式化。支持 BACKSPACE 语句的 Fortran 编译器将写入第二个大小副本以方便向后查找。
此类仅支持使用记录的两个大小的文件。它也不支持Intel和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