2012-06-03 9 views
25

Ich habe die Dokumente über diese Funktion gelesen, aber ich denke nicht, dass ich das richtig verstehe, und wenn mir jemand sagen kann, was ich falsch denke, oder wenn ich richtig bin, wäre es ein tolle Hilfe. Hier ist mein Verständnis:shutil.rmtree() Klarstellung

mit der shutil.rmtree(path) Funktion wird es nur das angegebene Verzeichnis löschen, nicht den gesamten Pfad. IE:

shutil.rmtree('user/tester/noob')

diese verwenden, wäre es nur die 'Noob' Verzeichnis löschen korrekt? nicht der komplette Weg?

+0

Was meinen Sie mit "nicht den vollständigen Pfad"? Was würde passieren, wenn es den vollständigen Pfad löschen würde? –

+0

der komplette Pfad wie in ''user/tester/noob''. IE lösche das Benutzerverzeichnis, das Tester und Noob enthält. –

+0

@IT Ninja: Was war das Ergebnis beim Testen? -Step 1 – user1801810

Antwort

40

Wenn noob ein Verzeichnis ist, löscht die shutil.rmtree() Funktion noob und alle darunter liegenden Dateien und Unterverzeichnisse. Das heißt, noob ist die Wurzel des zu entfernenden Baums.

24

Dies wird definitiv nur das letzte Verzeichnis im angegebenen Pfad löschen. Probieren Sie es einfach aus:

mkdir -p foo/bar 
python 
import shutil 
shutil.rmtree('foo/bar') 

... nur 'bar' entfernen.

11

Hier gibt es einige Missverständnisse.

ein Baum wie folgt vorstellen:

- user 
    - tester 
    - noob 
    - developer 
    - guru 

Wenn Sie user löschen möchten, tun shutil.rmtree('user') einfach. Dies löscht auch user/tester und user/tester/noob, da sie innerhalb user sind. Es wird jedoch auch gelöscht user/developer und user/developer/guru, wie sie auch innerhalb user sind.

Wenn rmtree('user/tester/noob') würde user und tester löschen, wie meinst du user/developer existieren würde, wenn user weg ist?


Oder meinst du so etwas wie http://docs.python.org/2/library/os.html#os.removedirs?

Es versucht, das übergeordnete Element jedes entfernten Verzeichnisses zu entfernen, bis es fehlschlägt, da das Verzeichnis nicht leer ist. Also in meinem Beispiel Baum, os.removedirs('user/tester/noob') würde zuerst noob entfernen, dann würde es versuchen, tester zu entfernen, das ist ok, weil es leer ist, aber es würde bei user stoppen und es in Ruhe lassen, weil es enthält developer, die wir nicht löschen möchten .