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)將記錄(包括大小)寫入檔案。