You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现递归顺序遍历文件与文件夹,优先处理子目录内容

实现符合系统显示顺序的深度优先文件夹遍历

现有脚本问题

你当前使用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)

代码说明

  1. 递归逻辑:进入文件夹后先打印自身,再递归深入每个子文件夹,处理完所有子内容后再返回处理当前目录的文件,完全贴合系统遍历顺序。
  2. 排序匹配:通过sorted(os.listdir(current_path))保证条目顺序和系统显示一致,再区分文件夹和文件,确保文件夹优先处理。
  3. 路径规范化:用os.path.normpath()统一路径格式,避免跨系统的路径分隔符差异。

内容的提问来源于stack exchange,提问作者kravb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:35:06