Delete Files (Dateien löschen)
Kurz: Das programmatische Entfernen einer Datei aus dem Dateisystem — im Gegensatz zum manuellen Löschen im Dateimanager meist unwiderruflich, ohne Papierkorb-Zwischenschritt.
Genauer: Vor dem Löschen sollte ein Programm prüfen, ob die Datei überhaupt existiert und ob die nötigen Berechtigungen vorhanden sind, um unerwartete Exceptions zu vermeiden. Weil das Löschen nicht rückgängig gemacht werden kann, bauen viele Anwendungen stattdessen ein “Soft Delete” ein (Datei nur als gelöscht markieren, physisch aber vorerst behalten).
Im Detail
Programmatisches Löschen unterscheidet sich vom manuellen Löschen über einen Dateimanager in einem entscheidenden Punkt: Es gibt normalerweise keinen Papierkorb als Sicherheitsnetz. Ein API-Aufruf wie os.remove(pfad) entfernt die Datei sofort und dauerhaft — ein Bug im eigenen Code kann damit ungewollt echten Datenverlust verursachen, ohne die übliche “Papierkorb wiederherstellen”-Rettungsleine.
import os
if os.path.exists(pfad):
try:
os.remove(pfad)
except PermissionError:
print("Keine Berechtigung zum Löschen.")
else:
print("Datei existiert nicht - nichts zu löschen.")Die Existenzprüfung VOR dem Löschversuch ist trotzdem nur bedingt sicher — zwischen Prüfung und tatsächlichem Löschversuch kann theoretisch ein anderer Prozess die Datei bereits entfernt haben (“Race Condition”). Robuster ist es deshalb oft, den Löschversuch direkt zu unternehmen und die passende Exception abzufangen, statt sich auf eine vorherige Prüfung zu verlassen.
Wegen der Endgültigkeit setzen viele Anwendungen, bei denen Datenverlust besonders kritisch wäre, auf Soft Delete statt auf echtes Löschen: Die Datei (bzw. bei Datenbank-Einträgen die Zeile) wird nur mit einem Löschvermerk markiert (z. B. ein deleted_at-Zeitstempel) und bleibt physisch zunächst erhalten. Erst nach Ablauf einer Frist — oder nie — wird sie tatsächlich endgültig entfernt. Das erlaubt, versehentliche Löschungen rückgängig zu machen, kostet aber dauerhaft Speicherplatz und macht Abfragen etwas komplexer (jede Abfrage muss “nicht gelöscht” mit filtern).
Ein verwandtes, aber technisch anderes Konzept ist das Löschen ganzer Verzeichnisse — dabei muss zusätzlich entschieden werden, ob nur leere Verzeichnisse gelöscht werden dürfen oder ob der gesamte Inhalt rekursiv mitgelöscht wird (letzteres ist besonders gefährlich bei fehlerhaften Pfadangaben).
Siehe auch: Files, Exceptions