Wie lösche ich eine Datei oder einen Ordner in Python?
python
file-io
directory
delete-file
Zygimantas
quelle
quelle
os.remove()
eine Ausnahme ausgelöst. Daher muss sie möglicherweise zuerst überprüftos.path.isfile()
oder in eine Datei eingeschlossen werdentry
.os.remove()
wenn eine Datei nicht vorhanden ist, istFileNotFoundError
.os.remove()
man mehrere Argumente, um mehrere Dateien zu löschen, oder ruft man sie jedes Mal für jede Datei auf?Python-Syntax zum Löschen einer Datei
Oder
Oder
pathlib Library für Python Version> 3.5
Path.unlink (missing_ok = False)
Unlink-Methode zum Entfernen der Datei oder des Symbolik-Links.
Beste Übung
a.
os.path.isfile("/path/to/file")
b. Verwenden
exception handling.
BEISPIEL für
os.path.isfile
Ausnahmebehandlung
RESPEKTIVE AUSGABE
Python-Syntax zum Löschen eines Ordners
Beispiel für
shutil.rmtree()
quelle
Verwenden
(Siehe vollständige Dokumentation zu Shutil ) und / oder
und
(Vollständige Dokumentation zu OS .)
quelle
Hier ist eine robuste Funktion, die sowohl
os.remove
als auch verwendetshutil.rmtree
:quelle
remove(path);
Aufrufs.os.path.islink(file_path):
Ein Fehler sollte seinos.path.islink(path):
Sie können die in-built verwenden
pathlib
Modul (benötigt Python 3.4+, aber es gibt updates für ältere Versionen auf PyPI:pathlib
,pathlib2
).Um eine Datei zu entfernen, gibt es folgende
unlink
Methode:Oder die
rmdir
Methode zum Entfernen eines leeren Ordners:quelle
pathlib
, das Löschen nicht leerer Verzeichnisse zu handhaben. Wie auch immer Sie verwenden könntenshutil.rmtree
. Es wurde in mehreren anderen Antworten erwähnt, daher habe ich es nicht aufgenommen.Verwenden Sie für Python 3 die Methoden
unlink
und object , um die Datei und das Verzeichnis einzeln zu entfernen :rmdir
Path
Beachten Sie, dass Sie auch relative Pfade mit
Path
Objekten verwenden und Ihr aktuelles Arbeitsverzeichnis mit überprüfen könnenPath.cwd
.Informationen zum Entfernen einzelner Dateien und Verzeichnisse in Python 2 finden Sie im folgenden Abschnitt.
Um ein Verzeichnis mit Inhalten zu entfernen, verwenden Sie
shutil.rmtree
und beachten Sie, dass dies in Python 2 und 3 verfügbar ist:Demonstration
Neu in Python 3.4 ist das
Path
Objekt.Verwenden wir eins, um ein Verzeichnis und eine Datei zu erstellen, um die Verwendung zu demonstrieren. Beachten Sie, dass wir das verwenden
/
, um die Teile des Pfads zu verbinden. Dies umgeht Probleme zwischen Betriebssystemen und Probleme bei der Verwendung von Backslashes unter Windows (bei denen Sie entweder Ihre Backslashes wie verdoppeln\\
oder rohe Zeichenfolgen wie verwenden müssenr"foo\bar"
):und nun:
Jetzt löschen wir sie. Zuerst die Datei:
Wir können Globbing verwenden, um mehrere Dateien zu entfernen. Lassen Sie uns zunächst einige Dateien dafür erstellen:
Dann iterieren Sie einfach über das Glob-Muster:
Demonstrieren Sie nun das Entfernen des Verzeichnisses:
Was ist, wenn wir ein Verzeichnis und alles darin entfernen möchten? Verwenden Sie für diesen Anwendungsfall
shutil.rmtree
Lassen Sie uns unser Verzeichnis und unsere Datei neu erstellen:
und beachten Sie, dass dies
rmdir
fehlschlägt, es sei denn, es ist leer, weshalb rmtree so praktisch ist:Importieren Sie nun rmtree und übergeben Sie das Verzeichnis an die Funktion:
und wir können sehen, dass das Ganze entfernt wurde:
Python 2
Wenn Sie mit Python 2 arbeiten, gibt es einen Backport des pathlib-Moduls namens pathlib2 , der mit pip installiert werden kann:
Und dann können Sie die Bibliothek mit einem Alias versehen
pathlib
Oder importieren Sie das
Path
Objekt einfach direkt (wie hier gezeigt):Wenn das zu viel ist, können Sie Dateien mit oder entfernen
os.remove
os.unlink
oder
und Sie können Verzeichnisse entfernen mit
os.rmdir
:Beachten Sie, dass es auch ein gibt
os.removedirs
- es entfernt leere Verzeichnisse nur rekursiv, aber es kann Ihrem Anwendungsfall entsprechen.quelle
rmtree(directory_path)
funktioniert in Python 3.6.6, aber nicht in Python 3.5.2 - Sie brauchenrmtree(str(directory_path)))
dort.quelle
shutil.rmtree ist die asynchrone Funktion. Wenn Sie also überprüfen möchten, wann sie abgeschlossen ist, können Sie die while-Schleife verwenden
quelle
shutil.rmtree
soll nicht asynchron sein. Es scheint jedoch unter Windows zu sein, dass Virenscanner stören.Zum Löschen von Dateien:
oder
Beide Funktionen sind semantisch gleich. Diese Funktion entfernt (löscht) den Dateipfad. Wenn path keine Datei und kein Verzeichnis ist, wird eine Ausnahme ausgelöst.
Zum Löschen von Ordnern:
oder
Um ganze Verzeichnisbäume zu entfernen,
shutil.rmtree()
kann verwendet werden.os.rmdir
Funktioniert nur, wenn das Verzeichnis leer ist und existiert.Zum rekursiven Löschen von Ordnern in Richtung übergeordneter Ordner:
Es entfernt jedes leere übergeordnete Verzeichnis mit self bis zum übergeordneten Verzeichnis, das Inhalt enthält
Für weitere Informationen Check offiziell doc:
os.unlink
,os.remove
,os.rmdir
,shutil.rmtree
,os.removedirs
quelle
So entfernen Sie alle Dateien im Ordner
So entfernen Sie alle Ordner in einem Verzeichnis
quelle
Um das in Éric Araujos Kommentar hervorgehobene TOCTOU- Problem zu vermeiden , können Sie eine Ausnahme abfangen, um die richtige Methode aufzurufen:
Da
shutil.rmtree()
werden nur Verzeichnisse und /os.remove()
oderos.unlink()
nur Dateien entfernt.quelle
shutil.rmtree()
Entfernt nicht nur das Verzeichnis, sondern auch dessen Inhalt.Ich empfehle die Verwendung,
subprocess
wenn das Schreiben eines schönen und lesbaren Codes Ihre Tasse Tee ist:Und wenn Sie kein Softwareentwickler sind, sollten Sie Jupyter in Betracht ziehen. Sie können einfach Bash-Befehle eingeben:
Traditionell verwenden Sie
shutil
:quelle
subprocess
.shutil.rmtree
machtrm -r
den Job ganz gut, mit dem zusätzlichen Bonus, unter Windows zu arbeiten.