Lesen einer unformatierten Direktzugriffsdatei in Python

Ich bin völlig neu in Python und schreibe meine Visualisierungscodes von Grund auf in Python (um die Verwendung teurer proprietärer Programme wie IDL zu vermeiden). Bisher habe ich IDL und Gnuplot verwendet. Was ich in der Lage sein möchte, ist das:

Mit fortran schreibe ich zweidimensionale Arrays in unformatierte Direktzugriffsdateien, die ich in Python lesen möchte. Der genaue Testcode ist unten angegeben. Der eigentliche Code ist ein riesiger Parallelcode, aber die Datenausgabe hat fast das gleiche Format.

<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>

Das Programm sollte mir Nullen für t = 1 geben und die Anzahl der "Inseln" erhöhen, um den Wert von t zu erhöhen. Aber wenn ich es mit dem unten angegebenen Python-Code lese, erhalte ich nur Nullen. Wenn ich die erste Schreibanweisung von Nullen entferne, erhalte ich nur die erste Zeitscheibe, unabhängig davon, welchen Wert von "Zeitscheibe" ich im Python-Code verwende. Der Code, den ich bisher habe, ist:

<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>

Ich möchte, dass die def readslice einen Datensatz an der i-ten Stelle lesen kann, wenn timeslice gleich i ist. Dafür habe ich versucht, f.seek zu verwenden, aber es scheint nicht zu funktionieren. numpy.fromfile scheint vom ersten Datensatz an zu lesen. Wie lasse ich numpy.fromfile von einem bestimmten Punkt in einer Datei aus lesen?

Ich versuche immer noch, mich an den Python-Stil zu gewöhnen und die Dokumentation durchzuarbeiten. Jede Hilfe und Hinweise wäre sehr dankbar.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage