shuutil.rmtree() 澄清

问题描述 投票:0回答:4

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

使用

shutil.rmtree(path)
功能,它只会删除指定的目录,而不是整个路径。即:

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

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

python python-2.7 shutil
4个回答
101
投票

shutil.rmtree('/usr/tester/noob')
函数将删除
noob
及其下面(但不包括上面)的所有文件和子目录。 也就是说,
noob
是要移除的树的根。


37
投票

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

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

...只会删除

'bar'


25
投票

这里有一些误解。

想象一棵这样的树:

 - 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.removdirs

它尝试删除每个已删除目录的父目录,直到失败,因为该目录不为空。因此,在我的示例树中,

os.removedirs('user/tester/noob')
将首先删除
noob
,然后尝试删除
tester
,这是可以的,因为它是空的,但它会停在
user
并保留它,因为它包含
 developer
,我们不想删除。


3
投票
**For Force deletion using rmtree command in Python:**

[user@severname DFI]$ python
Python 2.7.13 (default, Aug  4 2017, 17:56:03)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import shutil
>>> shutil.rmtree('user/tester/noob')



But what if the file is not existing, it will throw below error:


>>> shutil.rmtree('user/tester/noob')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/shutil.py", line 239, in rmtree
    onerror(os.listdir, path, sys.exc_info())
  File "/usr/local/lib/python2.7/shutil.py", line 237, in rmtree
    names = os.listdir(path)
OSError: [Errno 2] No such file or directory: 'user/tester/noob'
>>>

**To fix this, use "ignore_errors=True" as below, this will delete the folder at the given if found or do nothing if not found**


>>> shutil.rmtree('user/tester/noob', ignore_errors=True)
>>>

Hope this helps people who are looking for force  folder deletion using rmtree.
© www.soinside.com 2019 - 2024. All rights reserved.