shutil.rmtree() разъяснения

Я прочитал doc на этой функции, однако, я не думаю,что я понимаю это правильно, и если кто-нибудь может сказать мне, что я думаю неправильно, или если я прав, это было бы большой помощью. Вот мое понимание:

С помощью shutil.rmtree(path) функция, она удалит только указанный каталог, а не весь путь. Т. е.:

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

используя это, он удалит только каталог "noob" правильно? не полный путь?

3 ответов


Если noob является каталогом, то удалить noob и все файлы и подкаталоги в нем. То есть, noob - это корень дерева, который необходимо удалить.


это определенно удалит только последний каталог в указанном пути. Просто попробуйте:

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

...будет только удалить 'bar'.


здесь какое-то недоразумение.

представьте себе такое дерево:

 - user
   - tester
     - noob
   - developer
     - guru

если вы хотите удалить user, просто shutil.rmtree('user'). Это также удалит user/tester и user/tester/noob как они внутри user. Однако он также удалит user/developer и user/developer/guru, так как они тоже внутри user.

если rmtree('user/tester/noob') удалить user и tester, что значит user/developer существовали бы, если бы user ушел?


или вы что-то вроде http://docs.python.org/2/library/os.html#os.removedirs ?

он пытается удалить родителя каждого удаленного каталога, пока не произойдет сбой, потому что каталог не пуст. Итак, в моем примере дерева,os.removedirs('user/tester/noob') сначала удалит noob, тогда он попытается удалить tester, что нормально, потому что он пуст, но он остановится на user и оставить его в покое, потому что он содержит developer, которые мы не хотим удалять.