A eine Datei, die Fortran Verwendung gelesen werden können, und die folgende Ausgabe erzeugt:Fortran Binärdaten mit Python Lesen, schwimmt und ints
0 2044150 229424 0 0 0
0.0000000000000000 0.0000000000000000
2.97821895219385624E-003 0.0000000000000000 0.0000000000000000
0.0000000000000000 7.81250000000000000E-003 127.00000000000000 0 0 0 91948296 10067568 7115688 0
0 0 48 67.769999999999996
0.30700001120567322 0.69300001859664917 0.67769998311996460
Grundsätzlich einigen int * 4 Werte und etwas float * 8 Werte (im Header). Ich möchte in der Lage sein, diese Datei in Python zu lesen. Ich habe den folgenden Code:
f = open(fname,'rb')
data = np.fromfile(file=f,dtype=np.int32)
print data
und ich bekomme das Ergebnis:
[ 256 0 2044150 229424 0 0
0 0 0 0 0 536870912
1063806407 0 0 0 0 0
0 0 ]
Einige der Zahlen in Ordnung sind, und ich glaube, dass die 256 auf die Datensatzgröße bezieht. Allerdings, wenn ich versuche, in den Schwimmern zu lesen (von np.int32 Wechsel zu np.float64) bekomme ich
[ 1.26480805e-321 4.86836763e-309 0.00000000e+000 0.00000000e+000
0.00000000e+000 1.49166815e-154 5.25590200e-315 0.00000000e+000
0.00000000e+000 0.00000000e+000 5.26354425e-315 5.33599245e-315
0.00000000e+000 9.12063001e-306 3.51561699e-317 0.00000000e+000
-1.02951130e-086 2.68156223e+154 2.68156222e+154 -2.68156222e+154]
die eindeutig falsch nicht nur für die int32s ist, sondern auch für den Schwimmer 64s Ich hatte versucht, zu lesen.
Ich dachte, das hätte vielleicht etwas mit big/lindendian zu tun, aber habe keine Lösung gefunden. Ich bin mir auch sicher, dass ich versuche, den richtigen Datentyp (float64) einzulesen und viele andere versucht habe und sie ähnliche (oder schlechtere) Ergebnisse produzieren.
Ich weiß, dass das Format der Kopfzeile ist int * 4 (6), real * 8 (6), real * 8, real * 8, int * 4, int * 4, int * 4 (6) , int * 4, int * 4, real * 8, real * 8, real * 8, real * 8, zeichen (96)
Sie können eine Datei im gemischten Format nicht lesen, indem Sie entweder int oder float angeben. Du musst auswählen. Vielleicht könntest du es mit 'struct.unpack' versuchen –
Mit vorherigen Dateien habe ich sie zweimal geöffnet, einmal mit fromfile mit dtype = int, dann wieder die gleiche Datei geöffnet und aus datei mit dtype = float benutzt und das hat vorher gut funktioniert. Mein Grund für das Stellen der Frage ist, dass dies irgendwie unerklärlich anders schien. – Jack
das Problem ist die Datei beginnt mit 7 4-Byte-Ganzzahlen (Zählen der Kopfzeile) Als ungerade Sie sind nicht richtig ausgerichtet, wenn Sie einfach das ganze als 8-Byte-Werte lesen. – agentp