Ich öffne meine Datei wie folgt:Neuzeilenzeichen in Binärdatei mit Python ignorieren?
f = open("filename.ext", "rb") # ensure binary reading with b
Meine erste Zeile von Daten sieht wie folgt aus (wenn f.readline()
verwenden):
'\x04\x00\x00\x00\x12\x00\x00\x00\x04\x00\x00\x00\xb4\x00\x00\x00\x01\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00:\x00\x00\x00;\x00\x00\x00<\x00\x00\x007\x00\x00\x008\x00\x00\x009\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\t\x00\x00\x00\n'
Das Ding ist, ich will für Byte dieses Datenbytes lesen (f.read(4)
). Während des Debuggens erkannte ich, dass, wenn es bis zum Ende der ersten Zeile kommt, es immer noch in der Newline-Zeichen \n
übernimmt und es als das erste Byte der folgenden int ich gelesen verwendet wird. Ich möchte nicht einfach .splitlines()
verwenden, weil einige Daten eine n
innerhalb haben können und ich will es nicht beschädigen. Ich benutze übrigens Python 2.7.10. Ich lese auch, dass das Öffnen einer Binärdatei mit dem Parameter b
"kümmert sich" der neuen Zeile/Ende der Zeile Zeichen; Warum ist das bei mir nicht der Fall?
Dies ist, was in der Konsole geschieht als die Position unmittelbar vor dem Newline-Zeichen ist die Datei:
>>> d = f.read(4)
>>> d
'\n\x00\x00\x00'
>>> s = struct.unpack("i", d)
>>> s
(10,)
Was ist das Format der Datei wirklich? Sind die Zeilenumbrüche gedacht? Ist das Newline-Zeichen nur ein Zufall, wenn die wahre Information Bytes sind? Was ist das Problem beim Lesen? –
Nun, wie jede Datei, gibt es Zeilenumbrüche am Ende der Zeile. Jede Zeile hat eine ganze Zahl von Zahlen, aber das Lesen von Gruppen von 4 Bytes hat irrende Folgen, weil die Position der Datei am Ende der ersten Zeile, kurz vor '\ n', dem nächsten' f.read (4) 'steht nimmt '\ n' als das erste Byte und die nächsten drei Bytes sind die ersten drei Bytes der zweiten Zeile (die nächste Zeile). – user3180077
Also im Grunde sind die newlines für die Formatierung/Trennung und sollte nicht als "Daten" gelesen werden? –