2017-07-29 3 views
0

Ich habe eine Binärdatei, die die Position von 8000 Partikeln enthält. Ich weiß, dass jeder Partikelwert wie "-24.6151 ..." aussehen sollte (ich weiß nicht, mit welcher Genauigkeit die Werte von meinem Programm angegeben werden.)Binärdatei mit Python lesen, ohne Struktur zu kennen

Aber wenn ich versuche, die Datei mit diesem Code zu lesen:

In: with open('.//results0epsilon/energybinary/energy_00004.dat', 'br') as f: 
    buffer = f.read() 
    print ("Lenght of buffer is %d" % len(buffer)) 

    for i in buffer: 
     print(int(i)) 

ich als Ausgabe erhalten:

Lenght of buffer is 64000 

10 

168 

179 

43 
... 

ich die ganze Liste von Werten überspringen, aber wie Sie diese Werte sind weit weg von dem, was sehen kann ich erwarten Ich denke, ich habe eine Art von Decodierungsfehler.

würde ich jede Art von Hilfe schätzen :)

+1

ich versuchen kann 'struct' Bibliothek Binär-Dateien zu entpacken - https://docs.python.org/3/library/struct.html – pkisztelinski

+0

Sie die cn verwenden ['struct'] (https://docs.python.org/3/library/struct.html) Modul zum Entpacken (oder Packen) von Binärdaten. –

Antwort

4

Was Sie drucken sind jetzt die bytes Ihre Gleitkommadaten zu komponieren. Es macht also keinen Sinn als numerische Werte.

Natürlich gibt es keine 100% sichere Antwort, da wir nicht Ihre Daten sehen, aber ich werde versuchen zu erraten:

Sie haben 8000 Werte zu lesen und die Dateigröße ist 64000. Sie also wahrscheinlich haben double IEEE-Werte (jeweils 8 Bytes). Wenn es nicht IEEE ist, dann bist du Toast.

In diesem Fall können Sie Folgendes versuchen könnte:

import struct 
with open('.//results0epsilon/energybinary/energy_00004.dat', 'br') as f: 
    buffer = f.read() 
    print ("Length of buffer is %d" % len(buffer)) 

    data = struct.unpack("=8000d",buffer) 

, wenn die Daten gefälscht gedruckt wird, ist es wahrscheinlich ein endianness Problem. So ändern Sie die =8000 von <8000 oder >8000.

Referenz und Packen/Entpacken Formate: https://docs.python.org/3/library/struct.html

+0

mit Druck (Daten) Ich habe die folgende Ausgabe (-24.615130168305804, -24.61513016830572 ...) wie erwartet erhalten. Jetzt kann ich es weiter verarbeiten. Vielen Dank :) –

Verwandte Themen