os.walk() 目录生成器

目录生成器 Directory tree generator.

walk() 是 generator,直接print() 为  <generator object walk at 0x000001EB1C519888> ,一般常用 for 循环遍历其返回值。

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

函数会遍历 top 目录(包含其本身)下的所有文件夹。

参数:

top - 要遍历的目录地址(字符串形式),分隔符为 /,而不能是 \

topdown - 可选参数,默认True,从 top 向子目录方向生成 tuple 结果;若为 False,则从子目录向 top 根目录方向生成 tuple 结果

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

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

返回值:

对于以 top 为根的目录中的每个目录(包括 top 本身,同时每一层遍历仅为当前文件夹内容,每一层遍历均不包括 ’ . ‘ 和 ’ .. ',),产生一个含有 3 元素的元组(yields a 3-tuple):

dirpath, dirnames, filenames

  • dirpath - 字符串str,当前正在遍历的文件夹本身的地址
  • dirnames - 列表list,dirpath 中所有目录的名称(不包括子目录,不包括 ’ . ‘ 和 ’ .. ')
  • filenames - 列表list,dirpath 中所有非目录文件的名称(不包括子目录)。

注意,tuple中的名称仅仅是名称,不是完整的路径。要想获取 filenames 的完整路径(以 top开头),请执行

import os

for dirpath, dirnames, filesnames in os.walk("D:/project/opencv3", topdown=False):
    for name in files:
        print(os.path.join(root, name))

常用示例:

import os

# walk 生成器
# print(os.walk("D:/project/opencv3/c6"))
# <generator object walk at 0x000001EB1C519888>

# "." 当前文件的根目录
# for root, dirs, files in os.walk("."):
for root, dirs, files in os.walk("D:/project/opencv3/c6"):
    # 文件路径
    for name in files:
        print(os.path.join(root, name))
        # D:/project/opencv3/c6\test.py
    # 子文件夹的路径
    for name in dirs:
        print(os.path.join(root, name))
        # D:/project/opencv3/c6\python_c6

猜你喜欢

转载自www.cnblogs.com/gengyi/p/10546102.html
今日推荐