Python 实战:os 模块高效遍历目录全攻略(新手必看)

张开发
2026/4/10 5:44:52 15 分钟阅读

分享文章

Python 实战:os 模块高效遍历目录全攻略(新手必看)
在 Python 文件处理、数据批量读取、目录扫描等场景中遍历目录是最基础且核心的操作。Python 内置的os模块提供了丰富的文件和目录操作接口无需额外安装依赖就能轻松实现目录的深度 / 广度遍历。本文将从基础用法到实战场景手把手教你掌握os模块遍历目录的所有技巧代码可直接复制运行新手也能快速上手一、前置知识os 模块核心函数遍历目录前先熟悉 3 个os模块核心函数这是后续操作的基础表格函数作用os.listdir(path)返回指定路径下所有文件和文件夹名称的列表不递归子目录os.path.isdir(path)判断路径是否为目录返回布尔值os.path.join(path1, path2)拼接路径自动适配 Windows/Linux/macOS 系统分隔符os.walk(top)递归遍历目录自动生成目录树最常用的高效遍历方法小提示路径拼接必须用os.path.join()不要手动写/或\避免跨系统报错二、基础遍历仅遍历当前目录不递归需求只遍历指定目录下的直接文件和文件夹不进入子目录。代码示例python运行import os # 目标目录替换为你的实际路径 target_path ./test_dir # 判断目录是否存在 if not os.path.exists(target_path): print(f错误目录 {target_path} 不存在) else: # 遍历当前目录下的所有文件/文件夹 for name in os.listdir(target_path): # 拼接完整路径 full_path os.path.join(target_path, name) # 判断是文件还是目录 if os.path.isdir(full_path): print(f【目录】{full_path}) else: print(f【文件】{full_path})代码解析os.path.exists()先校验目录是否存在避免程序报错os.listdir()获取当前目录下所有名称os.path.join()拼接完整路径保证路径合法性os.path.isdir()区分文件和目录。三、进阶遍历递归遍历所有子目录核心实际开发中我们通常需要遍历目录下所有层级的文件包括子目录、孙子目录。这里推荐两种方法手动递归实现和os.walk()高效实现。方法 1手动递归理解原理通过函数递归调用遍历所有子目录python运行import os def traverse_dir_recursive(path): # 遍历当前目录 for name in os.listdir(path): full_path os.path.join(path, name) # 如果是目录递归调用自身 if os.path.isdir(full_path): print(f【目录】{full_path}) traverse_dir_recursive(full_path) # 如果是文件直接打印 else: print(f【文件】{full_path}) # 调用函数 if __name__ __main__: target_path ./test_dir if os.path.exists(target_path): traverse_dir_recursive(target_path) else: print(目录不存在)方法 2os.walk ()极简高效推荐os.walk()是 Python 专为目录遍历设计的函数自动递归所有子目录无需手动写递归逻辑代码极简原理os.walk(top)会返回一个三元组(当前目录路径, 当前目录下的子目录列表, 当前目录下的文件列表)循环即可遍历所有内容。代码示例python运行import os def traverse_dir_os_walk(path): # os.walk 自动递归遍历所有目录 for root, dirs, files in os.walk(path): # 遍历当前目录下的所有子目录 for dir_name in dirs: dir_path os.path.join(root, dir_name) print(f【目录】{dir_path}) # 遍历当前目录下的所有文件 for file_name in files: file_path os.path.join(root, file_name) print(f【文件】{file_path}) # 调用函数 if __name__ __main__: target_path ./test_dir if os.path.exists(target_path): traverse_dir_os_walk(target_path) else: print(目录不存在)优势代码量减少 50%无需递归逻辑稳定性高官方封装无递归深度限制直接分离目录和文件无需手动判断。四、实战场景按条件筛选文件遍历目录的核心用途是筛选指定类型的文件如批量读取图片、Excel、Python 文件等下面以「筛选所有.py 文件」为例实战代码python运行import os def find_python_files(path): python_files [] for root, _, files in os.walk(path): for file in files: # 筛选后缀为.py的文件 if file.endswith(.py): file_path os.path.join(root, file) python_files.append(file_path) return python_files # 调用查找目录下所有Python文件 if __name__ __main__: target_path ./ # 遍历当前项目目录 py_files find_python_files(target_path) print( 找到的Python文件 ) for f in py_files: print(f)扩展修改endswith()参数即可筛选其他文件图片endswith((.jpg, .png, .jpeg))Excelendswith((.xlsx, .xls))文本endswith(.txt)五、避坑指南新手必看路径问题Windows 路径不要用单\转义字符推荐相对路径./test_dir绝对路径rC:\Users\test\dir加r取消转义权限问题遍历系统盘如 C 盘可能出现权限不足建议添加异常捕获python运行try: os.listdir(path) except PermissionError: print(f无权限访问目录{path})效率问题超大目录优先用os.walk()比手动递归快 30% 以上。六、总结本文完整讲解了 Pythonos模块遍历目录的 3 个层级基础遍历os.listdir()仅遍历当前目录递归遍历手动递归 os.walk()推荐遍历所有子目录实战筛选按后缀批量筛选目标文件。os.walk()是日常开发的最优解代码简洁、跨平台、效率高建议牢记

更多文章