我已经阅读了该函数的文档,但是,我认为我没有正确理解它。如果有人能告诉我我缺少什么,或者我是否正确,那将是一个很大的帮助。这是我的理解:
使用
shutil.rmtree(path)
功能,它只会删除指定的目录,而不是整个路径。即:
shutil.rmtree('user/tester/noob')
使用这个,它只会删除“noob”目录,对吗?不是完整路径?
shutil.rmtree('/usr/tester/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.removdirs?
它尝试删除每个已删除目录的父目录,直到失败,因为该目录不为空。因此,在我的示例树中,
os.removedirs('user/tester/noob')
将首先删除noob
,然后尝试删除tester
,这是可以的,因为它是空的,但它会停在user
并保留它,因为它包含 developer
,我们不想删除。
**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.