2012-06-03 24 views
25

Przeczytałem dokumentację na temat tej funkcji, jednak nie sądzę, że rozumiem to poprawnie, a jeśli ktoś może mi powiedzieć, co im myślę źle, lub jeśli mam rację, byłoby to wspaniała pomoc. Oto moje zrozumienie:shutil.rmtree() wyjaśnienie

za pomocą funkcji shutil.rmtree(path), spowoduje to usunięcie tylko określonego katalogu, a nie całej ścieżki. IE:

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

za pomocą tego, by to usunąć tylko 'noob' katalogu poprawne? nie pełna ścieżka?

+0

Co masz na myśli mówiąc "nie jest to pełna ścieżka"? Co by się stało, gdyby "usunął całą ścieżkę"? –

+0

pełna ścieżka jak w '' user/tester/noob''. IE usunąć katalog użytkownika zawierający tester i noob. –

+0

@IT Ninja: jaki był rezultat testu? -Step 1 – user1801810

Odpowiedz

40

Jeśli noob jest katalogiem, funkcjausunie noob oraz wszystkie znajdujące się pod nim pliki i podkatalogi. To znaczy, noob jest korzeniem drzewa do usunięcia.

24

To z pewnością usunie tylko ostatni katalog z podanej ścieżki. Wystarczy go wypróbować:

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

... będzie tylko usunąć 'bar'.

11

Jest tu kilka nieporozumień.

Wyobraźmy sobie drzewo tak:

- user 
    - tester 
    - noob 
    - developer 
    - guru 

Jeśli chcesz usunąć user, zrób shutil.rmtree('user'). Spowoduje to również usunięcie user/tester i user/tester/noob, ponieważ znajdują się one wewnątrz user. Jednak spowoduje to również usunięcie user/developer i user/developer/guru, ponieważ są one również wewnątrz user.

Jeśli rmtree('user/tester/noob') by usuwać user i tester, jak masz na myśli user/developer istniałby gdyby user zniknął?


Czy masz na myśli coś w rodzaju http://docs.python.org/2/library/os.html#os.removedirs?

Próbuje usunąć rodzica każdego usuniętego katalogu, dopóki się nie powiedzie, ponieważ katalog nie jest pusty. Więc na moim przykładowym drzewie, os.removedirs('user/tester/noob') usunie pierwszy noob, wtedy spróbuje usunąć tester, co jest ok, ponieważ jest puste, ale zatrzymałoby się na user i zostaw je w spokoju, ponieważ zawiera developer, którego nie chcemy usuwać .