Dateien in Python kopieren und verschieben: shutil & os

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Dateien in Python kopieren und verschieben: Arbeiten mit den Modulen shutil und os

In der Python-Entwicklung sind Datei- und Verzeichnisoperationen an der Tagesordnung. Ob Backups erstellen, Benutzer-Uploads verarbeiten, Projektstrukturen organisieren oder Anwendungen bereitstellen – all diese Aufgaben erfordern eine programmatische Steuerung des Dateisystems. Die Automatisierung solcher Vorgänge vereinfacht die Datenverwaltung erheblich und macht manuelle, sich wiederholende Schritte überflüssig.

Das Modul shutil in Python bietet hochwertige Werkzeuge für die Arbeit mit Dateien und Verzeichnissen. In Kombination mit dem Modul os entsteht ein leistungsstarkes, plattformunabhängiges Toolkit für flexible Dateisystem-Skripte. Beide Module sind Teil der Python-Standardbibliothek und benötigen keine zusätzliche Installation.

Überblick über das Modul shutil

Der Name shutil leitet sich von "shell utility" ab und stellt eine Sammlung von Funktionen für fortgeschrittene Datei- und Verzeichnisoperationen bereit. Zu den wichtigsten Funktionen gehören:

  • copy() – Kopieren einer Datei ohne Metadaten
  • copy2() – Kopieren einer Datei mit vollständigen Metadaten
  • copytree() – Rekursives Kopieren ganzer Verzeichnisse
  • move() – Verschieben von Dateien und Ordnern an einen neuen Ort
  • rmtree() – Rekursives Löschen von Verzeichnissen mit Inhalt
  • copyfileobj() – Byteweises Kopieren von Dateiobjekten

Das Modul shutil lässt sich nahtlos mit dem Modul os kombinieren und eignet sich sowohl für kleine Automatisierungsskripte als auch für große Unternehmensanwendungen.

Methoden zum Kopieren von Dateien

Basis-Kopieren mit shutil.copy()

Die Funktion shutil.copy() kopiert den Inhalt einer Datei, ohne die Metadaten zu übertragen:

import shutil

quelle = 'quellordner/beispiel.txt'
ziel = 'zielordner/beispiel.txt'
shutil.copy(quelle, ziel)

Diese Funktion kopiert nur den Dateiinhalt. Metadaten wie Erstellungsdatum, letzte Änderung und Zugriffsrechte bleiben unberücksichtigt. Die Funktion entspricht dem Befehl cp unter Unix/Linux ohne Flags zur Attributerhaltung.

Wichtig: Existiert das Zielverzeichnis nicht, führt dies zu einem Fehler. Es empfiehlt sich, vorher die Existenz des Zielordners zu prüfen oder ihn programmatisch zu erstellen.

Kopieren mit Metadaten: shutil.copy2()

Wenn alle Dateiinformationen – inklusive Zeitstempel, Besitzer und Zugriffsrechte – erhalten bleiben sollen, kommt copy2() zum Einsatz:

shutil.copy2('datei.txt', 'backup/datei.txt')

Diese Methode ist besonders nützlich für Backups, Projektmigrationen zwischen verschiedenen Systemen oder wenn die ursprünglichen Dateiattribute kritisch sind. copy2() sorgt für eine möglichst originalgetreue Kopie am neuen Speicherort.

Kopieren von Verzeichnissen

Rekursives Kopieren mit shutil.copytree()

Zum Kopieren ganzer Verzeichnisse mit allen Unterordnern und Dateien dient copytree():

shutil.copytree('altes_projekt', 'neues_projekt')

Standardmäßig löst copytree() einen FileExistsError aus, wenn das Zielverzeichnis bereits existiert. Seit Python 3.8 kann der Parameter dirs_exist_ok=True verwendet werden, um das Überschreiben oder Ergänzen von Inhalten zu erlauben:

shutil.copytree('altes_projekt', 'neues_projekt', dirs_exist_ok=True)

Die Funktion arbeitet rekursiv und wird in folgenden Szenarien eingesetzt:

  • Klonen von Projektvorlagen

Blogs

Buchempfehlungen