shuil.rmtree()澄清

2024-05-23 21:36:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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


Tags: path函数文档路径目录testerrmtreeshutil
3条回答

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

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

…将只删除'bar'

这里有些误会。

想象一下这样一棵树:

 - user
   - tester
     - noob
   - developer
     - guru

如果要删除user,只需执行shutil.rmtree('user')。这也将删除user/testeruser/tester/noob,因为它们在user中。但是,它也将删除user/developeruser/developer/guru,因为它们也在user内部。

如果rmtree('user/tester/noob')会删除usertester,那么如果user消失了,你怎么说user/developer会存在?


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

它尝试删除每个已删除目录的父目录,直到失败,因为该目录不是空的。所以在我的示例树中,os.removedirs('user/tester/noob')将首先删除noob,然后它将尝试删除tester,这是可以的,因为它是空的,但是它将在user处停止,并将其单独保留,因为它包含developer,我们不想删除它。

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

相关问题 更多 >