W3docs

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.")

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 send2trash
import 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

MethodeZielNicht-leeres Verzeichnis?Hinweise
os.remove(path)Einzelne DateiKlassisch, weit verbreitet
Path.unlink(missing_ok=True)Einzelne DateiModern, sicher gegen Race Conditions
os.rmdir(path)Leeres VerzeichnisNeinLöst OSError aus, wenn nicht leer
Path.rmdir()Leeres VerzeichnisNeinpathlib-Äquivalent
shutil.rmtree(path)VerzeichnisbaumJaDauerhaft – mit Vorsicht verwenden
send2trash.send2trash(path)Datei oder OrdnerJaWiederherstellbar; 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() oder Path.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 FileNotFoundError und PermissionError, um Skripte robuster zu machen.
  • Bevorzugen Sie send2trash, wenn ein rückgängig machbares Löschen wichtig ist.

Verwandte Kapitel

Was this page helpful?