Beim Lesen von Binärdateien werden mit numpy fromfile falsche Nullwerte angezeigt
Frage
Ich versuche, eine Binärdatei mit Python zu lesen.Dies ist der Code, den ich verwende:
fb = open(Bin_File, "r")
a = numpy.fromfile(fb, dtype=numpy.float32)
Am Ende des Arrays erhalte ich jedoch Nullwerte.Zum Beispiel für einen Fall, in dem nrows=296
Und ncol=439
und als Ergebnis, len(a)=296*439
, ich bekomme Nullwerte für a[-922:]
.Ich weiß, dass diese Werte noData (in diesem Beispiel -9999) aus einem vertrauenswürdigen Code in R sein sollten.Weiß jemand, warum ich diese unsinnigen Nullen bekomme?
P.S.:Ich bin mir nicht sicher, ob es etwas damit zu tun hat, aber len(a)
Ist nrows*ncols+2
!Ich muss diese beiden loswerden a = a[0:-2]
damit ich sie mit in Zeilen und Spalten umforme a_reshape = a.reshape(nrows, ncols)
Ich erhalte keine Fehlermeldung.
Lösung
Wenn Sie eine Datei zum Lesen als Binärdatei öffnen, sollten Sie den Modus verwenden "rb"
anstatt "r"
.
Hier einige Hintergrundinformationen zum Dokumente.Auf Linux-Rechnern benötigen Sie das nicht "b"
aber es wird nicht schaden.Auf Windows-Rechnern müssen Sie verwenden "rb"
für Binärdateien.
Beachten Sie auch, dass die beiden zusätzlichen Einträge, die Sie erhalten, ein häufiger Fehler/eine häufige Funktion bei Verwendung des „unformatierten“ binären Ausgabeformats von Fortran sind.Jede in diesem Modus gegebene Schreibanweisung erzeugt einen Datensatz, der von zwei 4-Byte-Blöcken umgeben ist.
Diese Blöcke stellen Ganzzahlen dar, die die Anzahl der Bytes im Block unformatierter Daten auflisten.Beispiel: [223] [223 Datenbytes] [223].