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.