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()函数实现的。如果最深层的目录根本就不是空目录,所以会报错终止。
遇到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笔记005——os.path模块用法详解
- 详解Python中的join()函数的用法(字符串和os.path)
- 详解Python中的join()函数的用法(字符串和os.path)
- Python中.join()和os.path.join()两个函数的用法详解
- python学习笔记24(路径与文件 (os.path包, glob包))
- Python学习笔记二---OS.Path模块
- Python学习笔记10:标准库之路径和文件(os.path包,glob包)
- python 系统学习笔记(十二)---os os.path os.walk
- Python笔记——python os.path模块常用方法详解
- python学习——python os.path模块常用方法详解
- Python--小甲鱼学习笔记--第30课:文件系统(os、os.path)
- python 系统学习笔记(十二)---os os.path os.walk
- python 系统学习笔记(十二)---os os.path os.walk
- Python学习笔记(15)- os\os.path 操作文件
- python 之 os.path学习笔记
- python 系统学习笔记(十二) -- ---os os.path os.walk
- python 系统学习笔记(十二)---os os.path os.walk
- Python的学习(二十五)-- os.path模块
- Python学习笔记(4)Python中super的用法