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