shutil.rmtree()澄清

IT *_*nja 40 python shutil python-2.7

我已经阅读了这个函数的文档,但是,我不认为我理解它.如果有人能告诉我我错过了什么,或者我是否正确,那将是一个很大的帮助.这是我的理解:

使用该shutil.rmtree(path)函数,它将只删除指定的目录,而不是整个路径.IE:

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

使用这个,它只会删除'noob'目录正确吗?不是完整的路径?

小智 57

如果noob是一个目录,该shutil.rmtree()函数将删除noob它下面的所有文件和子目录.也就是说,noob是要删除的树的根.


kra*_*ase 26

这肯定只会删除指定路径中的最后一个目录.试试吧:

mkdir -p foo/bar
python
import shutil
shutil.rmtree('foo/bar')
Run Code Online (Sandbox Code Playgroud)

......只会删除'bar'.


cla*_*cke 16

这里有一些误解.

想象一下这样的树:

 - user
   - tester
     - noob
   - developer
     - guru
Run Code Online (Sandbox Code Playgroud)

如果你想删除user,就这样做shutil.rmtree('user').这也将删除user/tester,user/tester/noob因为它们在里面user.然而,它也将删除user/developeruser/developer/guru,因为他们也在里面user.

如果rmtree('user/tester/noob')将删除usertester,你的意思是user/developer,如果将存在user没有了吗?


或者你的意思是http://docs.python.org/2/library/os.html#os.removedirs

它尝试删除每个已删除目录的父级,直到它失败,因为该目录不为空.所以在我的示例树中,os.removedirs('user/tester/noob')首先删除noob,然后它会尝试删除tester,这是好的,因为它是空的,但它会停在user并且不管它,因为它包含developer,我们不想删除.