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

如何重构子文件夹文件操作:统一多深度遍历与自定义动作

实现可变深度的通用目录遍历并支持层级自定义操作

你的原脚本采用固定层级嵌套写法,扩展性很差——没法灵活调整遍历深度,也无法针对不同层级执行差异化操作。下面是一套通用实现方案,把遍历逻辑和业务操作完全解耦:

核心思路

  1. 用迭代式遍历替代固定嵌套,避免递归深度限制问题
  2. 接受「遍历深度」「每层路径匹配模式」「对应层级的处理函数」三个核心参数
  3. 每一层遍历完成后,自动执行该层级绑定的自定义操作,再进入下一层

通用遍历函数实现

import glob

def traverse_dirs(depth, patterns, handlers=None):
    # 初始化处理函数列表,未指定的层级默认执行空操作
    handlers = handlers or [lambda _: None] * depth
    current_paths = [""]  # 初始路径起点
    
    for level in range(depth):
        next_paths = []
        current_pattern = patterns[level]
        current_handler = handlers[level]
        
        for base_path in current_paths:
            # 拼接当前层级的完整匹配模式
            full_pattern = f"{base_path}/{current_pattern}" if base_path else current_pattern
            # 匹配当前层级的所有路径
            matched_paths = glob.glob(full_pattern, recursive=False)
            
            for path in matched_paths:
                # 执行当前层级的自定义操作
                current_handler(path)
                next_paths.append(path)
        
        current_paths = next_paths

用法示例

以你原脚本的3层场景为例:假设第一层是根目录下的子目录,第二层是日期目录,第三层是要处理的文件,我们可以这样调用:

# 定义文件层级的处理逻辑(替换成你的do_stuff)
def process_file(file_path):
    print(f"正在处理文件: {file_path}")
    # 这里写你的文件整理逻辑:移动、重命名、解析内容等

# 调用通用遍历函数
traverse_dirs(
    depth=3,
    patterns=["*", "*", "*.csv"],  # 每层的glob匹配模式
    handlers=[None, None, process_file]  # 仅在第三层执行处理操作
)

扩展说明

  • 灵活调整深度:只需要修改depth参数,同时对应调整patterns和handlers的长度即可
  • 层级差异化操作:比如可以在第一层目录执行「创建归档目录」操作,第二层执行「校验日期格式」操作:
    def check_dir(dir_path):
        print(f"校验目录合法性: {dir_path}")
    
    def validate_date(date_dir):
        print(f"校验日期格式: {date_dir}")
    
    traverse_dirs(
        depth=3,
        patterns=["data_*", "2024-*", "*.log"],
        handlers=[check_dir, validate_date, process_file]
    )
    
  • 兼容glob特性:可以使用glob支持的所有匹配规则,比如**(需开启recursive=True)、?等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:21:36