Python面试题更新 2026-08-03

用 Python 编写一段代码,实现对指定文件夹的遍历操作。

考察说明

考查对 Python 文件系统遍历常用 API 的掌握,以及递归与非递归实现的差异。

回答思路

  1. 【回答框架 1】要点是区分遍历方式:os.walk 自顶向下或自底向上递归访问目录树,返回根路径、子目录列表和文件列表,适合整体遍历;os.scandir 返回 DirEntry 对象,可结合 is_dir 和 is_file 判断,过滤更高效;glob 适合按模式匹配文件路径。
  2. 【回答框架 2】若需递归非遍历所有子目录,可用 os.listdir 加 os.path.isdir 手动递归,但需注意符号链接可能导致死循环,可用 os.path.realpath 或限制深度。
  3. 【回答框架 3】遍历时建议使用 with 语句或明确释放资源,尤其在 scandir 场景;收集文件列表可排序以保持确定性,处理权限错误可捕获 PermissionError 并继续。
  4. 【回答框架 4】性能上 scandir 比 listdir 快且无需多次系统调用,但若只统计文件数,os.walk 内部也使用 scandir,更简洁。
  5. 【关键点 1】os.walk 生成三元组(根路径,子目录列表,文件列表),可通过 topdown 控制遍历顺序。
  6. 【关键点 2】os.scandir 返回 DirEntry 对象,避免额外拼接路径,性能更好。
  7. 【关键点 3】glob.glob 支持通配符匹配,如 **/*.py 可递归匹配,但需 recursive=True。
  8. 【关键点 4】处理符号链接和权限错误以防遍历中断。
  9. 【易错点 1】不要混用 listdir 和 isdir 时忽略权限或链接,可能导致递归异常。
  10. 【易错点 2】glob 递归模式默认关闭,忘记 recursive=True 会匹配失败。
  11. 【易错点 3】在遍历过程中修改目录结构(如删除文件)可能导致不可预知行为,应收集路径后再操作。