1114 Stimmen

Wie entferne/lösche ich einen Ordner, der nicht leer ist?

Ich erhalte die Fehlermeldung "Zugriff verweigert", wenn ich versuche, einen Ordner zu löschen, der nicht leer ist. Ich habe bei meinem Versuch den folgenden Befehl verwendet: os.remove("/folder_name") .

Wie lässt sich ein Ordner/Verzeichnis, das nicht leer ist, am effektivsten entfernen/löschen?

1782voto

ddaa Punkte 49943
import shutil

shutil.rmtree('/folder_name')

Referenz der Standardbibliothek: shutil.rmtree .

Nach Plan, rmtree schlägt bei Ordnerbäumen mit schreibgeschützten Dateien fehl. Wenn Sie möchten, dass der Ordner unabhängig davon gelöscht wird, ob er schreibgeschützte Dateien enthält, dann verwenden Sie

shutil.rmtree('/folder_name', ignore_errors=True)

165voto

kkubasik Punkte 3534

Desde die Python-Dokumente auf os.walk() :

# Delete everything reachable from the directory named in 'top',
# assuming there are no symbolic links.
# CAUTION:  This is dangerous!  For example, if top == '/', it
# could delete all your disk files.
import os
for root, dirs, files in os.walk(top, topdown=False):
    for name in files:
        os.remove(os.path.join(root, name))
    for name in dirs:
        os.rmdir(os.path.join(root, name))

149voto

Siva Mandadi Punkte 3433
import shutil
shutil.rmtree(dest, ignore_errors=True)

43voto

yota Punkte 1680

Ab Python 3.4 können Sie :

import pathlib

def delete_folder(pth) :
    for sub in pth.iterdir() :
        if sub.is_dir() :
            delete_folder(sub)
        else :
            sub.unlink()
    pth.rmdir() # if you just want to delete the dir content but not the dir itself, remove this line

wobei pth est un pathlib.Path Instanz. Schön, aber vielleicht nicht die schnellste.

27voto

Dave Chandler Punkte 601

Desde docs.python.org :

Dieses Beispiel zeigt, wie ein Verzeichnisbaum unter Windows entfernt wird, wobei einige der Dateien das Nur-Lese-Bit gesetzt haben. Es verwendet den onerror Callback, um das Nur-Lesen-Bit zu löschen und den Löschvorgang erneut zu versuchen. Jede nachfolgende Fehler wird weitergegeben.

import os, stat
import shutil

def remove_readonly(func, path, _):
    "Clear the readonly bit and reattempt the removal"
    os.chmod(path, stat.S_IWRITE)
    func(path)

shutil.rmtree(directory, onerror=remove_readonly)

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