Python – Dateien und Verzeichnisse löschen
Dateien und Verzeichnisse in Python löschen mit os.remove, pathlib.Path.unlink, os.rmdir und shutil.rmtree – inkl. sicherer Fehlerbehandlung.
Dieses Kapitel behandelt alle standardmäßigen Methoden zum Löschen von Dateien und Verzeichnissen in Python – vom klassischen os-Modul bis zur modernen pathlib-API und dem shutil-Modul für nicht-leere Verzeichnisse. Sie lernen außerdem sichere Muster für die Fehlerbehandlung, damit Ihr Code auch dann korrekt reagiert, wenn eine Datei bereits fehlt oder eine Berechtigung verweigert wird.
Eine einzelne Datei löschen
Mit os.remove()
Das os-Modul ist Teil der Python-Standardbibliothek und stellt eine portable Schnittstelle zu Betriebssystemfunktionen bereit. os.remove() löscht eine einzelne Datei. Es wird FileNotFoundError ausgelöst, wenn der Pfad nicht existiert, und PermissionError, wenn der Prozess nicht über die erforderlichen Berechtigungen verfügt.
Eine Datei mit os.remove() löschen
import os
os.remove("report.txt")Umschließen Sie den Aufruf mit einem try/except-Block, damit Ihr Programm fehlende Dateien korrekt behandelt:
Eine Datei mit Fehlerbehandlung löschen
import os
try:
os.remove("report.txt")
print("File deleted.")
except FileNotFoundError:
print("File not found — nothing to delete.")
except PermissionError:
print("Permission denied.")Mit pathlib.Path.unlink() (Python 3.4+)
pathlib bietet eine objektorientierte Schnittstelle für Dateisystempfade. Path.unlink() löscht die Datei, auf die der Pfad zeigt. Seit Python 3.8 können Sie missing_ok=True übergeben, um FileNotFoundError automatisch zu unterdrücken.
Eine Datei mit pathlib löschen
from pathlib import Path
# Raises FileNotFoundError if the file does not exist
Path("report.txt").unlink()Eine Datei lautlos löschen, falls sie nicht existiert (Python 3.8+)
from pathlib import Path
Path("report.txt").unlink(missing_ok=True)
print("Done — file deleted or was already absent.")missing_ok=True ist die idiomatische Python-3.8+-Alternative zu einem Prüfen-dann-Löschen-Muster. Bevorzugen Sie es gegenüber os.path.exists()-Prüfungen, da es eine Race Condition vermeidet: Ein anderer Prozess könnte die Datei zwischen Ihrer Prüfung und Ihrem Löschaufruf entfernen.
Existenz vor dem Löschen prüfen (klassisches Muster)
Bevor missing_ok hinzugefügt wurde, war der standardmäßige Ansatz eine os.path.exists()-Absicherung:
Existenz vor dem Löschen prüfen
import os
if os.path.exists("report.txt"):
os.remove("report.txt")
else:
print("File not found.")Dies funktioniert gut für Skripte, bei denen Race Conditions kein Problem darstellen, aber missing_ok=True ist in neuem Code übersichtlicher.
Ein leeres Verzeichnis löschen
os.rmdir() entfernt ein Verzeichnis, aber nur wenn es leer ist. Es wird OSError ausgelöst, wenn das Verzeichnis Dateien oder Unterverzeichnisse enthält.
Ein leeres Verzeichnis löschen
import os
try:
os.rmdir("empty_folder")
print("Directory removed.")
except FileNotFoundError:
print("Directory not found.")
except OSError:
print("Directory is not empty or cannot be removed.")Mit pathlib verwenden Sie Path.rmdir():
from pathlib import Path
Path("empty_folder").rmdir()Ein nicht-leeres Verzeichnis löschen
Um ein Verzeichnis und alles darin (Dateien, Unterverzeichnisse und deren Inhalte) zu entfernen, verwenden Sie shutil.rmtree(). Dies entspricht rm -rf unter Unix – es ist dauerhaft und nicht rückgängig zu machen.
Einen Verzeichnisbaum löschen
import shutil
shutil.rmtree("old_project")
print("Directory and all its contents deleted.")Fügen Sie eine Fehlerbehandlung für die häufigen Fehlerfälle hinzu:
Einen Verzeichnisbaum sicher löschen
import shutil
try:
shutil.rmtree("old_project")
print("Deleted successfully.")
except FileNotFoundError:
print("Directory not found.")
except PermissionError:
print("Permission denied.")Der Parameter ignore_errors
Übergeben Sie ignore_errors=True, um alle Fehler lautlos zu unterdrücken. Verwenden Sie dies nur, wenn es Ihnen tatsächlich gleichgültig ist, ob das Löschen erfolgreich war:
import shutil
shutil.rmtree("old_project", ignore_errors=True)Mehrere Dateien nach einem Muster löschen
Um alle Dateien zu löschen, die einem Glob-Muster entsprechen, kombinieren Sie pathlib.Path.glob() mit unlink():
Alle .log-Dateien in einem Verzeichnis löschen
from pathlib import Path
deleted = 0
for log_file in Path(".").glob("*.log"):
log_file.unlink()
deleted += 1
print(f"{deleted} log file(s) deleted.")Um Unterverzeichnisse rekursiv zu durchsuchen, verwenden Sie rglob():
Alle .tmp-Dateien in einem Verzeichnisbaum löschen
from pathlib import Path
for tmp_file in Path(".").rglob("*.tmp"):
tmp_file.unlink(missing_ok=True)Das os-Modul-Äquivalent verwendet os.listdir() und os.remove():
Alle .txt-Dateien mit os löschen
import os
directory = "."
for filename in os.listdir(directory):
if filename.endswith(".txt"):
os.remove(os.path.join(directory, filename))Überprüfen Sie immer, welche Dateien übereinstimmen, bevor Sie eine Massenlöschung durchführen. Ein kurzer print()-Durchlauf vor der Löschschleife ist eine sichere Gewohnheit.
Dateien in den Papierkorb verschieben (rückgängig machbares Löschen)
os.remove() und Path.unlink() löschen Dateien dauerhaft – es gibt kein Rückgängigmachen. Wenn Sie ein wiederherstellbares Löschen benötigen (Datei in den Systempapierkörb verschieben), installieren Sie das Drittanbieter-Paket send2trash:
pip install send2trashimport send2trash
send2trash.send2trash("report.txt")
print("File moved to Trash.")Dies ist nützlich in Desktop-Tools oder Skripten, bei denen ein versehentliches Löschen katastrophale Folgen hätte.
Vergleich der Löschmethoden
| Methode | Ziel | Nicht-leeres Verzeichnis? | Hinweise |
|---|---|---|---|
os.remove(path) | Einzelne Datei | — | Klassisch, weit verbreitet |
Path.unlink(missing_ok=True) | Einzelne Datei | — | Modern, sicher gegen Race Conditions |
os.rmdir(path) | Leeres Verzeichnis | Nein | Löst OSError aus, wenn nicht leer |
Path.rmdir() | Leeres Verzeichnis | Nein | pathlib-Äquivalent |
shutil.rmtree(path) | Verzeichnisbaum | Ja | Dauerhaft – mit Vorsicht verwenden |
send2trash.send2trash(path) | Datei oder Ordner | Ja | Wiederherstellbar; Installation erforderlich |
Zusammenfassung
- Verwenden Sie
Path.unlink(missing_ok=True)für das Löschen einzelner Dateien in modernem Python (3.8+). - Verwenden Sie
os.rmdir()oderPath.rmdir()nur für leere Verzeichnisse. - Verwenden Sie
shutil.rmtree(), um ein Verzeichnis und alle seine Inhalte zu entfernen – überprüfen Sie zuerst den Pfad. - Behandeln Sie immer
FileNotFoundErrorundPermissionError, um Skripte robuster zu machen. - Bevorzugen Sie
send2trash, wenn ein rückgängig machbares Löschen wichtig ist.
Verwandte Kapitel
- Python File Handling — Öffnen, Modi und die
with-Anweisung - Python Read Files — Daten aus Dateien lesen
- Python Write / Create Files — Dateien schreiben und erstellen
- Python Try Except — Ausnahmen robust behandeln