scipy.io.

FortranFile#

класс scipy.io.FortranFile(filename, mode='r', header_dtype= 'numpy.uint32'>)[источник]#

Файловый объект для неформатированных последовательных файлов из кода Fortran.

Параметры:
filenameфайл или строка

Открытый файловый объект или имя файла.

mode{'r', 'w'}, опционально

Режим чтения-записи, по умолчанию ‘r’.

header_dtypedtype, опционально

Тип данных заголовка. Размер и порядок байтов должны соответствовать входному/выходному файлу.

Методы

close()

Закрывает файл.

read_ints([dtype])

Считывает запись заданного типа из файла, по умолчанию целочисленного типа (INTEGER*4 на Фортране).

read_reals([dtype])

Считывает запись заданного типа из файла, по умолчанию — число с плавающей запятой (real*8 на Фортране).

read_record(*dtypes, **kwargs)

Читает запись заданного типа из файла.

write_record(*items)

Записать запись (включая размеры) в файл.

Примечания

Эти файлы разбиты на записи неопределённых типов. Размер каждой записи указан в начале (хотя размер этого заголовка не стандартизирован), и данные записываются на диск без какого-либо форматирования. Компиляторы Fortran, поддерживающие оператор BACKSPACE, будут записывать вторую копию размера для облегчения обратного поиска.

Этот класс поддерживает только файлы, записанные с обоими размерами для записи. Он также не поддерживает подзаписи, используемые в компиляторах Intel и gfortran для записей, которые больше 2GB с 4-байтовым заголовком.

Пример неформатированного последовательного файла на Fortran будет записан как:

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

WRITE(1) myvariable

Поскольку это нестандартный формат файла, содержимое которого зависит от компилятора и порядка байтов машины, рекомендуется осторожность. Известно, что файлы от gfortran 4.8.0 и gfortran 4.1.2 на x86_64 работают.

Рассмотрите использование файлов прямого доступа 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