Чтение прямого доступа к неформатированному файлу в Python
Я совершенно новичок в Python и пишу свои коды визуализации на Python с нуля (чтобы не использовать дорогие проприетарные программы, такие как IDL). До сих пор я использовал IDL и gnuplot. То, что я хочу быть в состоянии сделать это:
Я пишу двумерные массивы в неформатированные файлы прямого доступа, используя фортран, который я хочу читать на python. Точный код теста приведен ниже. Фактический код представляет собой огромный параллельный код, но вывод данных практически в том же формате.
<code>program binary_out implicit none integer :: i,j,t,rec_array double precision, dimension(100,100) :: fn double precision, parameter :: p=2*3.1415929 INQUIRE(IOLENGTH=rec_array) fn open(unit=10,file='test',status='new',form='unformatted',access='direct',recl=rec_array) fn=0 write(10,rec=1) fn do t=1,3 do i=1,100 do j=1,100 fn(i,j)=sin(i*p*t/100)*cos(j*p*t/100) enddo enddo write(10,rec=t+1) fn enddo close(10) end program binary_out </code>
Программа должна давать мне нули при t = 1 и увеличивающемся количестве «островков» для увеличения значения т. Но когда я читаю его, используя приведенный ниже код на python, я просто получаю нули. Если я удаляю первый оператор записи нулей, я просто получаю первый временной интервал независимо от того, какое значение равно «временному срезу». Я использую в коде Python. Код, который у меня пока есть:
<code>#!/usr/bin/env python import scipy import glob import numpy as np import matplotlib.pyplot as plt import os, sys from pylab import * def readslice(inputfilename,field,nx,ny,timeslice): f=open(inputfilename,'r') f.seek(timeslice*nx*ny) field=np.fromfile(inputfilename,dtype='d',count=nx*ny) field=np.reshape(field,(nx,ny)) return field a=np.dtype('d') a=readslice('test',a,100,100,2) im=plt.imshow(a) plt.show() </code>
Я хочу, чтобы def readslice мог читать запись на i-м месте, если временный интервал равен i. Для этого я попытался использовать f.seek, но, похоже, он не работает. numpy.fromfile, похоже, начинает читать с самой первой записи. Как мне сделать numpy.fromfile для чтения из определенной точки в файле?
Я все еще пытаюсь привыкнуть к стилю Python и копаться в документации. Любая помощь и указатели будут с благодарностью.