您的位置:首页 > 编程语言 > Python开发

Python学习:纠错笔记:详解os.removedirs(path)的正确用法

2017-02-13 01:14 856 查看
第一次写博客

遇到os模块里的os.removedirs(path),有点摸不着头脑,它的名字和大部分教程网站上都告诉我们,它的作用是遍历删除一个目录下的多个目录(多个非空目录),听起来好像这样:

系统原来的目录:

Window F:\盘的目录如下:

F:

\ a, a.txt                                                      (代表F 目录下有一个文件夹a,和一个名为a.txt的文本文件 )

\ b, b.txt                                                      (代表a 目录下有一个文件夹b,和一个名为b.txt的文本文件 )

\ c, c,txt                                                      (代表b 目录下有一个文件夹c,和一个名为c.txt的文本文件 )

调用os.removedirs(r'F:\a\b') 后就会删除b文件夹和嵌套在b文件夹中的子文件夹和文件,但是实验之后发现,不但无法达到删除目的,而且会报错终止。我们从错误信息中找信息,发现它是在调用redir()时出错的。

查看官方文档,才明白:

os.removedirs(path)Remove directories recursively. Works like rmdir() except that, if the leaf directory is successfully removed, removedirs() tries to successively remove every parent directory mentioned in path until an error
is raised (which is ignored, because it generally means that a parent directory is not empty). For example, os.removedirs('foo/bar/baz') will first remove the directory 'foo/bar/baz', and then remove 'foo/bar' and 'foo' if they are empty. Raises OSError if
the leaf directory could not be successfully removed.

原来,os.removedirs()遍历删除多个文件夹不假,但是,它适用的情景很特殊:

他的工作方式像rmdir()一样,它删除多个文件夹的方式是通过在目录上由深及浅逐层调用rmdir()函数实现的,在确定最深的目录为空目录时(因为rmdir只能移除空目录),调用rmdir()函数,移除该目录,工作对象上移一层目录,如果上次的移除动作完毕后当前目录也变成了空目录,那么移除当前目录。重复此动作,直到遇到一个非空目录为止。

例如:

F:

\ a                                                        (代表F 目录下有一个文件夹a )

\ b, b.txt                                               (代表a 目录下有一个文件夹b 和 一个文本文件b.txt)

\ c                                                       (代表b 目录下有一个文件夹c )

\ d                                                       (代表c 目录下有一个文件夹d)

\ e                                                       (代表d 目录下有一个文件夹e )

\ f                                                        (代表e  目录下有一个文件夹f )

你看,a目录下包含一个b目录和一个文件, b目录以下就是空目录套空目录了

如果我们执行

os.removedirs(r'F:\a\b\c\d\e\f') 

那么在函数的内部:

它依次删除了目录f, e, d, c,b 。每次删除一个目录时,被删除的目录都是个空目录。删除动作直到遇到一个非空目录a后才停下了。(因为目录a内还有文件b.txt)

所以结果为:

F:

\ a                                                        (代表F 目录下有一个文件夹a )

\ b

至于文章开通的例子为什么会报错,答案已经公布了,因为:该函数的工作方式像rmdir()一样,它删除多个文件夹的方式是通过在目录上由深及浅逐层调用rmdir()函数实现的。如果最深层的目录根本就不是空目录,所以会报错终止。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python os path