822 Stimmen

Wie kann man den Inhalt eines Ordners löschen?

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.

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

698voto

Nick Stinemates Punkte 38639
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))

496voto

Blueicefield Punkte 4639

Sie können dies einfach tun:

import os
import glob

files = glob.glob('/YOUR/PATH/*')
for f in files:
    os.remove(f)

Sie können natürlich auch einen anderen Filter in Ihrem Pfad verwenden, zum Beispiel : /YOU/PATH/*.txt zum Entfernen aller Textdateien in einem Verzeichnis.

368voto

Oli Punkte 14359

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.

129voto

Iker Jimenez Punkte 6827

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

88voto

Husky Punkte 5195

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.com

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.

Powered by:

X