Seite 1 von 1
Binärdatei revers schreiben
Verfasst: Donnerstag 11. Mai 2017, 18:16
von de_tom
Mit folgendem Code wird eine Datei binär gelesen und revers in eine neue Datei geschrieben. Mir ist dabei aber nicht wirklich klar, was die Anweisung in Zeile 4 exakt bedeutet. Kann mir diese Schreib-Anweisung (also das zwischen den Klammern) jemand erklären?
Code: Alles auswählen
file_in = open('datei.bin','rb')
file_out = open('dateineu.bin','wb')
a = file_in.read()
file_out.write(a[::-1])
file_in.close()
file_out.close()
Vielen Dank
Tom
Re: Binärdatei revers schreiben
Verfasst: Donnerstag 11. Mai 2017, 18:27
von BlackJack
@de_tom: Die Syntax wird im Abschnitt
Sequence Types in der Dokumentation erklärt.
Edit: Mit der ``with``-Anweisung und ohne das unnötig (und schlecht) benannte Zwischenergebnis würde das so aussehen:
Code: Alles auswählen
with open('datei.bin', 'rb') as in_file:
with open('dateineu.bin', 'wb') as out_file:
out_file.write(in_file.read()[::-1])
Wobei man aufpassen sollte nur Dateien zu verarbeiten die von der Grösse her zweimal in den Arbeitsspeicher passen. Sonst müsste man etwas mehr Arbeit investieren und Anforderungen mindestens an die Eingabedatei zu stellen, dass sie entweder eine Grösse hat, die man ermitteln kann, oder das sie ”seekable” ist. Beides würde natürlich auch nicht schaden.

Re: Binärdatei revers schreiben
Verfasst: Donnerstag 11. Mai 2017, 19:21
von de_tom
Vielen Dank. Super erklärt in der Dokumentation. Bin ziemlicher Neuling und kannte Slices bisher nur mit 1 Doppelpunkt. -1 bdeutet hier also quasi "Schrittweite -1".
Du hast in Deiner Antwort übrigens ein Thema angeschnitten, zu dem ich gleich die nächste Frage hätte. Wie lese ich eine Binärdatei "pufferweise" ein, damit bei sehr großen Dateien keine Probleme bzgl. Arbeitsspeicher auftreten? Und wie schreibe ich sie dann z.B. in eine neue Datei? Und wie kann ich die pufferweise eingelesenen Daten parsen, also z.B. nach bestimmten Bytefolgen durchsuchen?
Gruß
Tom
Re: Binärdatei revers schreiben
Verfasst: Donnerstag 11. Mai 2017, 21:26
von kbr
@de_tom: Du kannst der read-Methode noch einen Parameter mitgeben, wieviele Bytes maximal eingelesen werden sollen. So kannst Du eine Datei in Chunks lesen. Binäre Daten sind immer eklig, auch in Python. Vielleicht hilft Dir da das 'struct' Modul aus der stdlib weiter.