如何实现递归顺序遍历文件与文件夹,优先处理子目录内容
实现符合系统显示顺序的深度优先文件夹遍历
现有脚本问题
你当前使用os.walk的遍历脚本如下:
import os FOLDER_TO_UPLOAD = "你的目标文件夹路径" for root, folders, filenames in os.walk(FOLDER_TO_UPLOAD): for folder in sorted(folders): path = os.path.normpath(os.path.join(root, folder)) print(path) for file in filenames: path = os.path.normpath(os.path.join(root, file)) if os.path.isfile(path): print(path)
该脚本会先遍历当前目录下所有文件夹,再处理文件,之后才进入子文件夹,输出顺序无法满足你的需求。
需求说明
你需要深度优先遍历:遇到一个文件夹后,先处理完该文件夹及其所有子内容(子文件夹、子文件),再回到同级目录处理下一个条目,完全匹配系统文件夹的显示顺序。
以目标结构为例:
| - A | - - B, file.txt | - - - C | - - D
期望输出顺序:
- A - A/B - A/B/file.txt - A/B/C - A/D
解决方案:递归实现深度优先遍历
递归是实现这种顺序的最优方案,以下是完整代码:
import os def deep_walk(current_path): # 先打印当前文件夹路径 print(os.path.normpath(current_path)) # 获取当前目录下的所有条目并排序 entries = sorted(os.listdir(current_path)) folders = [] files = [] # 区分文件夹和文件,保持排序逻辑 for entry in entries: entry_path = os.path.join(current_path, entry) if os.path.isdir(entry_path): folders.append(entry_path) elif os.path.isfile(entry_path): files.append(entry_path) # 递归处理子文件夹(逐个深入,处理完一个再下一个) for folder in folders: deep_walk(folder) # 处理当前目录下的文件 for file in files: print(os.path.normpath(file)) # 调用函数,传入目标文件夹路径 FOLDER_TO_UPLOAD = "你的目标文件夹路径" deep_walk(FOLDER_TO_UPLOAD)
代码说明
- 递归逻辑:进入文件夹后先打印自身,再递归深入每个子文件夹,处理完所有子内容后再返回处理当前目录的文件,完全贴合系统遍历顺序。
- 排序匹配:通过
sorted(os.listdir(current_path))保证条目顺序和系统显示一致,再区分文件夹和文件,确保文件夹优先处理。 - 路径规范化:用
os.path.normpath()统一路径格式,避免跨系统的路径分隔符差异。
内容的提问来源于stack exchange,提问作者kravb
相关产品推荐
相关产品推荐

