Binärdatei revers schreiben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
de_tom
User
Beiträge: 15
Registriert: Dienstag 19. Juli 2016, 19:34

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
Zuletzt geändert von Anonymous am Donnerstag 11. Mai 2017, 18:20, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
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. :-)
de_tom
User
Beiträge: 15
Registriert: Dienstag 19. Juli 2016, 19:34

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
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@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.
Antworten