scipy.io.

FortranFile#

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

用於 Fortran 程式碼中未格式化循序檔案的檔案物件。

參數:
filename檔案或字串

開啟檔案物件或檔案名稱。

mode{‘r’, ‘w’}, 選項

讀寫模式,預設為 ‘r’。

header_dtypedtype,選項

標頭的資料類型。大小和位元組序必須與輸入/輸出檔案相符。

註解

這些檔案被分成未指定類型的記錄。每個記錄的大小在開始時給出(儘管此標頭的大小不是標準的),並且資料被寫入磁碟而沒有任何格式化。支援 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

方法

close()

關閉檔案。

read_ints([dtype])

從檔案中讀取給定類型的記錄,預設為整數類型(Fortran 中的 INTEGER*4)。

read_reals([dtype])

從檔案中讀取給定類型的記錄,預設為浮點數(Fortran 中的 real*8)。

read_record(*dtypes, **kwargs)

從檔案中讀取給定類型的記錄。

write_record(*items)

將記錄(包括大小)寫入檔案。