fbpx

Dateien mit Python bearbeiten – kopieren, umbenennen, archivieren

Inhalt
    Add a header to begin generating the table of contents

    Im letzten Artikel ging es darum, wie du Dateien anlegen, reinschreiben und aus ihnen lesen kannst.
    Viel Alltag besteht aber auch darin, haufenweise Dateien von A nach B zu kopieren. Dann werden sie noch umbenannt, damit sie auch ja dem korrekten Schema entsprechen.

    Am Ende müssen sie vor dem Versand an Kollegen, Kunden, Dienstleister oder Systeme natürlich noch gepackt werden.
    Keiner hat gerne drölfzig einzelne Dateien an seine E-Mails geklebt, die dann mühevoll einzeln heruntergeladen werden müssen.

    Natürlich gibt es mit Python auch dafür Hilfen und genau die stelle ich dir heute vor.

    Du weißt nicht, was du mit den Dateien machen sollst? Hier findest du Hilfe.

    FunktionBeschreibung
    shutil.copy(Quelle, Ziel)Datei von Quelle nach Ziel kopieren
    shutil.copystats(Quelle, Ziel)Metainformationen von einer Datei (Quelle) an eine andere, vorhandene Datei (Ziel) kopieren
    os.rename(Quelle, Ziel)Datei (Quelle) mit neuem Namen (Ziel) versehen
    shutil.make_archive(Name, Typ, Pfad)Vollständigen Pfad / Ordner archivieren
    zipfile.ZipFileEinzelne Dateien archivieren

    Dateien kopieren

    Python bringt ein Modul (= eine Bibliothek) mit um direkt auf die Betriebssystem-Shell-Tools zugreifen zu können.
    Also die Werkzeuge, die in der Konsole verwendet werden können.

    Diese Shell-Tools sind in der Bibliothek shutil also Shell-Utilities gesammelt.

    shutil.copy(<QUELLE>, <ZIEL>)
    import shutil, os
    print([file for file in os.listdir('.') if '.txt' in file])
    shutil.copy('Beispiel.txt', 'Beispiel_copy.txt')
    print([file for file in os.listdir('.') if '.txt' in file])

    Mit copy() kannst du Dateien kopieren.
    Dazu gibst du in die Funktion zuerst den Pfad, den du kopieren möchtest und danach den Pfad, an den die Datei kopiert werden soll.
    Also (Quelle, Ziel).

    Allerdings kopiert copy() nur die Inhalte der Dateien. Wenn du Metainformationen wie Erstellungszeit, Bearbeitungszeit, etc. kopieren möchtest, musst du dafür die Funktion copystat() benutzen.

    shutil.copystat(<QUELLE>, <ZIEL>)
    import shutil, os
    print([file for file in os.listdir('.') if '.txt' in file])
    shutil.copystat('Beispiel.txt', 'Beispiel_copy.txt')
    print([file for file in os.listdir('.') if '.txt' in file])

    Die Funktion copystat() kopiert allerdings nur die Metainformationen, nicht die Datei!

    Wenn du also eine Datei mit Metainformationen kopieren willst, musst du erst mit copy() eine Kopie anlegen und dann mit copystat() die Metainformationen nachziehen.

    Dateien umbenennen

    Um Dateien umzubenennen bringt das os Modul von Python die Funktion rename() mit.
    Wirf einfach den Ausgangspfad und den Zielpfad in die Funktion wie auch bei copy().
    Nur wird in dem Fall die Datei “verschoben”, bzw. umbenannt und keine Kopie erzeugt.

    os.rename(<QUELLE>, <ZIEL>)
    import os
    os.rename('Beispiel_copy.txt', 'Beispiel_Kopie.txt')
    print([file for file in os.listdir('.') if '.txt' in file])

    Dateien packen

    Natürlich darf auch das Verpacken von Dateien nicht fehlen.
    Um vollständige Pfade zu verpacken, stellt dir shutil mit der Funktion make_archive() eine einfache und schnelle Möglichkeit bereit.
    Du gibst den Namen an, den dein Archiv haben soll. Als Nächstes kommt die Archiv-Art, also ZIP oder TAR und abschließend noch der Pfad, den du in ein Archiv packen möchtest.

    shutil.make_archive(<NAME>, <TYP> ,<PFAD>)
    import os, shutil
    if not os.path.exists('Neu'):
        os.makedirs('Neu')                    # makedirs erzeugt den angegebenen Pfad
    open('Neu/Datei.txt', 'x').close()        # Datei in unserem neuen Ordner anlegen
    shutil.make_archive('Neu', 'zip', 'Neu')  # Neuen Ordner archivieren
    shutil.make_archive('Neu', 'tar', 'Neu')
    print([file for file in os.listdir('.') if '.zip' in file or '.tar' in file])

    Klasse, ganze Ordner packen funktioniert also.
    Meistens reicht es aber eine einzelne Datei oder vielleicht ein paar Dateien in einem Archiv zusammenzufassen.

    Dafür musst du nicht erst manuell einen Ordner anlegen und die Dateien zusammen sammeln, nur um dann den Ordner verpacken zu können.

    Mit dem Modul zipfile bekommst du die Klasse ZipFile geliefert.
    Und mit der wiederum kannst du ganz gezielt Archive so zusammenbauen, wie du sie gerne hättest.
    Es funktioniert genauso, wie das Schreiben in Dateien. Nur dass du diesmal keine Texte, sondern ganze Pfade für Dateien angibst.

    with ZipFile(<PFAD>, <OPERATION>) as archiv:
        archiv.write(<PFAD>)
    from zipfile import ZipFile
    with ZipFile('einzelne_dateien.zip', 'w') as archiv:
        archiv.write('Beispiel.txt')
        archiv.write('Beispiel_Kopie.txt')
    with ZipFile('einzelne_dateien.tar', 'w') as archiv:
        archiv.write('Beispiel.txt')
        archiv.write('Beispiel_Kopie.txt')
    print([file for file in os.listdir('.') if '.zip' in file or '.tar' in file])

    Zusammenfassung

    • shutil.copy() und shutil.copystats() kopieren Dateien und ihre zugehörigen Metainformationen.
    • Über os.rename() können Dateien umbenannt werden.
    • shutils.make_archive() archiviert ganze Pfade.
    • zipfile.ZipFile erlaubt das Archivieren einzelner Dateien.
    WebScraping Angebot

    Kurse

    Code Challenges und YouTube Videos führen nicht immer zum gewünschten Erfolg.
    Manchmal ist es besser, gezielt und strukturiert durch ein Thema zu arbeiten.

    Schau dich einfach mal bei meinen Kursen um.
    Ohne lästiges Blah Blah steigen wir direkt in das Thema ein und behandeln alles, was du brauchst.

    Picture of Ingo Janßen

    Ingo Janßen

    Lerne nicht einfach programmieren. Löse Probleme und automatisiere Aufgaben!

    Das könnte dich auch interessieren

    Nach oben scrollen
    Newsletter Popup Form

    Keine Inhalte mehr verpassen?

    Melde dich direkt für den "Code-Kompass" an und erhalte nützliche Tipps und Informationen direkt in deinen Posteingang.