Python中的os.walk()
菜鸟教程对绝⼤多数的api介绍都⽐较详细:
语法
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中⽐较难理解的概念。
菜鸟教程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时则相反:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论