os.walk()返回(root, dirs, files)三元组:root为当前目录路径,dirs为子目录名列表(可修改以控制遍历),files为文件名列表;均不带路径,需os.path.join拼接。
用 os.walk() 遍历目录,核心是理解它返回的三元组结构和遍历顺序——它按深度优先、自顶向下(默认)逐层访问,每次迭代给出当前目录路径、子目录名列表、文件名列表。
每次循环得到的是一个包含三个元素的元组:(root, dirs, files):
注意:dirs 和 files 都是纯名称列表,不含路径;若需完整路径,需用 os.path.join(root, name) 拼接。
因为 dirs 列表在每次迭代中可被就地修改,所以能动态控制下一层访问目标:
立即学习“Python免费学习笔记(深入)”;
dirs.remove("temp") 或 dirs[:] = [d for d in dirs if d != "node_modules"]
root.count(os.sep)(Windows 用 root.count("\\")),超深则清空 dirs
break 可终止当前循环,但不会中断整个遍历;真正中止需用异常或标志位不必每次都从头写循环,针对典型需求有简洁模式:
if file.endswith(".py"): print(os.path.join(root, file))
len(files),配合 root 输出即可root 深度计算缩进,再拼接 dirs + f
iles 名称os.walk() 简单直接,但有些边界情况需留意:
PermissionError,建议用 try/except 包裹整个循环followlinks=False),设为 True 可能导致无限循环,慎用pathlib.Path.rglob() 替代简单查找(如 list(p.rglob("*.log"))),更函数式、易读;复杂逻辑仍推荐 os.walk()