Python中的os.walk()

您所在的位置:网站首页 qq企业邮箱登录路口 Python中的os.walk()

Python中的os.walk()

#Python中的os.walk()| 来源: 网络整理| 查看: 265

菜鸟教程对绝大多数的api介绍都比较详细:

http://www.runoob.com/python/os-walk.html

语法

walk()方法语法格式如下:

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]) 参数

top -- 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。

root 所指的是当前正在遍历的这个文件夹的本身的地址dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)

topdown --可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。

onerror -- 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。

followlinks -- 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录。

实例

在看到菜鸟教程的介绍时,对os.walk()的用法仍然不太明确。用一个简单的实例来学习下:

首先随便找一个测试路径,截图如下:

打开Pycharm的Python Console,逐步来查看这个api的具体用法

查看右侧对应的debug页面,发现这里是一个生成器。生成器是和迭代器对应的,Python中比较难理解的概念。

对于迭代器,迭代器就是用于迭代操作(for 循环)的对象,它像列表一样可以迭代获取其中的每一个元素,任何实现了 __next__ 方法 (python2 是 next,Python3中的 __next__ 方法也是对next()的封装)的对象都可以称为迭代器。个人理解好处在于可以实现按需调用,而不必要一次性加载所有列表中的元素,在大数据量的情况下减少了内存的使用。

对于生成器,是利用yield关键字而不是利用return关键字来返回值,注意 yield 对应的值在函数被调用时不会立刻返回,而是调用next方法时(本质上 for 循环也是调用 next 方法)才返回。但是生成器和迭代器都是可迭代对象,所以对于生成器和迭代器,都不必要一直调用next(g),直接for循环即可。假设func 是一个生成器函数,调用该函数时返回对象就是生成器 ,可以用在 for 循环等场景中。

生成器与迭代器对比:二者都实现了按需调用的可迭代对象,迭代器需要实现__next__方法,而生成器只需要使用yield关键字即可,生成器更加简洁。

查看生成器的具体内容,从以下截图可以看到,生成器中的元素对应着菜鸟教程里面说的root、dirs、files,:

查看生成器的第一项-root的遍历方式,当不带topdown参数时,topdown为True,会优先遍历top目录,即对应的入参目录,再去遍历top目录的子目录,当topdown为False时则相反:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3