os.walk(top,topdown = True,onerror = None,followlinks = False)
通过自顶向下或自底向上走树来生成目录树中的文件名。
对于根目录顶部(包括顶部本身)树中的每个目录,它产生一个3元组(dirpath,dirnames,filenames)。
dirpath是一个字符串,即目录的路径。
dirnames是dirpath中子目录的名称列表(不包括“.”和“..”)。filenames
是dirpath中非目录文件名称的列表。
请注意,列表中的名称不包含路径组件。
要得到一个完整路径(从top开始)到dirpath中的文件或目录,请执行os.path.join(dirpath,name)。
如果可选参数topdown为True或未指定,则在其任何子目录(目录从上到下生成)的三元组之前生成目录的三元组。
如果topdown为False,则在其所有子目录的三元组(即自下而上生成的目录)之后,生成目录的三元组。
不管topdown的值如何,在目录及其子目录的元组被生成之前,子目录列表被检索。
当topdown为True时,调用者可以就地修改dirnames列表(也许使用del或slice赋值),而walk()只会递归到名称保持dirnames的子目录中;
这可以用来修剪搜索,强制访问的特定顺序,甚至可以在再次恢复walk()之前通知walk()关于调用者创建或重命名的目录。
当topdown为False时修改dirnames对walk的行为没有影响,因为在自底向上模式下dirnames中的目录是在生成dirpath之前生成的。
默认情况下,来自listdir()调用的错误将被忽略。
如果指定了可选参数onerror,它应该是一个函数;
它将被调用一个参数,一个OSError实例。
它可以报告错误继续行走,或者提出异常终止行走。
请注意,文件名可用作异常对象的文件名属性。
默认情况下,walk()不会解析为目录的符号链接。
将followlinks设置为True,以在支持符号链接的系统(比如Unix)上访问由符号链接指向的目录。
注意:
请注意,如果链接指向自身的父目录,则将后续链接设置为True可导致无限递归。
walk()不跟踪它已经访问的目录(不保存访问记录)。
举个例子:
文件分布如下,NULL表示空目录
---------------------------------------
A -> AA -> aa1.txt aa2.txt
-> AB -> NULL
-> AC -> NULL
-> test.py
------------------------------------------
代码1:
>>> import os
>>>
>>> for root, dirs, files in os.walk(".", topdown=False):
... for name in files:
... print(os.path.join(root, name))
... for name in dirs:
... print(os.path.join(root, name))
...
.\AA\aa1.txt
.\AA\aa2.txt
.\test.py
.\AA
.\AB
.\AC
--------------------------------------------
代码2:
>>> for root, dirs, files in os.walk(".", topdown=True):
... for name in files:
... print(os.path.join(root, name))
... for name in dirs:
... print(os.path.join(root, name))
...
.\test.py
.\AA
.\AB
.\AC
.\AA\aa1.txt
.\AA\aa2.txt
参考:
1.python中os.walk的用法
https://www.jianshu.com/p/bbad16822eab
2.官方文档
https://docs.python.org/3.5/library/os.html?highlight=os%20walk#os.walk
https://www.jianshu.com/p/bbad16822eab
2.官方文档
https://docs.python.org/3.5/library/os.html?highlight=os%20walk#os.walk