concatenate Datein

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
mit
User
Beiträge: 285
Registriert: Dienstag 16. September 2008, 10:00

Hallo,
Ist es moeglich in Python diese Befehle Plattform unabhaengig zu implementieren:

Code: Alles auswählen

head file2 --bytes=1024 >> file1 && tail --bytes=+1024 file2 >file2
Vielen Dank im Vorraus
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

D.h. doch nehme die ersten 1024 Bytes von file2 und füge diese an file1 an.
Nehme dann die letzten 1024 Bytes von file2 und speichere diese als file2.
Gehört das nicht zu den Basics in der Python Programmierung, wie man sowas umsetzt?
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

darktrym hat geschrieben: Nehme dann die letzten 1024 Bytes von file2 und speichere diese als file2.
"tail --bytes=+1024" bedeutet, dass ab Byte 1024 gelesen wird - nicht nur die letzten 1024 Byte.
darktrym hat geschrieben:Gehört das nicht zu den Basics in der Python Programmierung, wie man sowas umsetzt?
Jo, mit file-Objekt, read() und seek() sollte das zu schaffen sein.
BlackJack

@mit: Du möchtest also wirklich den Inhalt von `test2` *löschen*!? Bei der Shell-Zeile kommt nämlich ein `test2` heraus, das 0 Bytes gross ist. Die Umleitungen werden immer ausgewertet *bevor* die Befehle abgearbeitet werden, für die die Umleitung gilt, und ``>dateiname`` leert eine eventuell bestehende Datei. Das ``tail`` hat dann also wenn es gestartet wird, schon gar nichts mehr was es lesen könnte.

Edit:

Code: Alles auswählen

def main():
    filename_a = 'tmp/test.bin'
    filename_b = 'tmp/test2.bin'
    block_size = 1024
    with open(filename_a, 'rb+') as in_file:
        with open(filename_b, 'ab') as out_file:
            out_file.write(in_file.read(block_size))
        in_file.truncate(0)


if __name__ == '__main__':
    main()
Antworten