2017-04-04 2 views
0

ich versuche, eine RAW-Datei mit dem folgenden Code zu schreiben:Schreiben uint16 Raw-Dateien

OutputFile = open(OutputFilePath,'w') 
BlockArray= np.array(A).astype(np.uint16) 
BlockArray.tofile(OutputFile) 
OutputFile.close() 

Dann versuche ich es noch einmal zu lesen, mit:

OutputFile = open(OutputFilePath,'r+') 
print np.fromfile(OutputFile,dtype=np.uint16) 

Das Problem besteht darin, dass die Dateigröße richtig, aber die ersten 8192 Zahlen sind gut, aber dann werden Zahlen umgekehrt oder völlig falsch. Die Form des Arrays ist (300,1312,98). Ich weiß nicht, was hier passiert. Kann mir jemand erklären, wie das passiert und wie ich eine korrekte Rohdatei schreiben kann?

mit umgekehrt ich meine, dass die Hex-Zahl zum Beispiel A5 01 = 421 sein sollte aber in der Raw-Dateinummer 01 A5 = 42241 geschrieben wird.

+0

Welche Version von Python? Welches Betriebssystem? –

+0

Python 2.7 auf mehreren Fenstern 10 und 7 möglicherweise 8 –

Antwort

2

Das Standardverhalten des .tofile() Methode ist eine binäre Datei zu schreiben, so dass Sie die Datei öffnen müssen, die Sie im Binär-Modus schreibt:

OutputFile = open(OutputFilePath, 'wb') 

Das gleiche gilt für das Lesen der Datei:

Dies ist in Windows wegen der automatischen Konvertierung von Zeilenenden, die Python mit Text (dh nicht-binären) Dateien tut, von entscheidender Bedeutung.

+0

Ich sah in der Tat, dass das Problem Zeilenenden waren nicht verstehen, warum sie da waren, aber es scheint zu arbeiten, vielen Dank. Seltsamerweise gilt dieses Verhalten nicht für np.memmep. Weißt du, warum? –

+0

@ J.Goedhart: Es wird nicht auf 'np.memmap()' angewendet, weil das 'file.write()' nicht aufruft. –

Verwandte Themen