Python中的os.walk

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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值