Wie kann ich den Inhalt eines lokalen Ordners in Python löschen?
Das derzeitige Projekt ist für Windows, aber ich würde gerne auch *nix sehen.
Wie kann ich den Inhalt eines lokalen Ordners in Python löschen?
Das derzeitige Projekt ist für Windows, aber ich würde gerne auch *nix sehen.
import os, shutil
folder = '/path/to/folder'
for filename in os.listdir(folder):
file_path = os.path.join(folder, filename)
try:
if os.path.isfile(file_path) or os.path.islink(file_path):
os.unlink(file_path)
elif os.path.isdir(file_path):
shutil.rmtree(file_path)
except Exception as e:
print('Failed to delete %s. Reason: %s' % (file_path, e))
Sie können den Ordner selbst sowie seinen gesamten Inhalt löschen, indem Sie shutil.rmtree
:
import shutil
shutil.rmtree('/path/to/folder')
shutil.**rmtree**(_path_, _ignore_errors=False_, _onerror=None_)
Einen ganzen Verzeichnisbaum löschen; Pfad muss auf ein Verzeichnis zeigen (aber nicht auf einen symbolischen Link auf ein Verzeichnis). Wenn ignorieren_fehler wahr ist, werden Fehler, die aus fehlgeschlagenen Entfernungen resultieren, ignoriert; wenn falsch oder nicht vorhanden, werden solche Fehler durch den Aufruf eines Handlers behandelt, der durch onerror oder, falls dies nicht der Fall ist, eine Ausnahme auslösen.
In Erweiterung von mhawkes Antwort habe ich folgendes implementiert. Es entfernt den gesamten Inhalt eines Ordners, aber nicht den Ordner selbst. Getestet unter Linux mit Dateien, Ordnern und symbolischen Links, sollte auch unter Windows funktionieren.
import os
import shutil
for root, dirs, files in os.walk('/path/to/folder'):
for f in files:
os.unlink(os.path.join(root, f))
for d in dirs:
shutil.rmtree(os.path.join(root, d))
Ich bin überrascht, dass noch niemand die großartige pathlib
um diese Aufgabe zu erfüllen.
Wenn Sie nur Dateien in einem Verzeichnis entfernen wollen, kann es ein Einzeiler sein
from pathlib import Path
[f.unlink() for f in Path("/path/to/folder").glob("*") if f.is_file()]
Um auch Verzeichnisse rekursiv zu entfernen, können Sie etwas wie folgt schreiben:
from pathlib import Path
from shutil import rmtree
for path in Path("/path/to/folder").glob("**/*"):
if path.is_file():
path.unlink()
elif path.is_dir():
rmtree(path)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
21 Stimmen
Für *nix würde ich, um ehrlich zu sein, einfach die
os.system('rm -rf folder')
27 Stimmen
@TilakMaddy Das ist eine schreckliche Methode, vor allem, wenn Sie den Ordnernamen als Benutzereingabe verwenden. Leider können wir Kommentare nicht herabwürdigen.
6 Stimmen
Der Kommentar von @TilakMaddy ist eine schmerzlose Lösung, aber er geht nicht auf den Teil "Inhalt" ein.
os.system('rm -rf folder/*')
ist der richtige Weg, vorausgesetzt, es gibt keine.*
Inhalt...4 Stimmen
Wir sollten ein neues Argument hinzufügen in
shutil.rmtree
(ex ignore_main_folder/preserve_main_folder). Dies ist oft nützlich, wenn Sie nicht das Benutzerrecht haben, den Hauptordner zu erstellen.