如何重构子文件夹文件操作:统一多深度遍历与自定义动作
实现可变深度的通用目录遍历并支持层级自定义操作
你的原脚本采用固定层级嵌套写法,扩展性很差——没法灵活调整遍历深度,也无法针对不同层级执行差异化操作。下面是一套通用实现方案,把遍历逻辑和业务操作完全解耦:
核心思路
- 用迭代式遍历替代固定嵌套,避免递归深度限制问题
- 接受「遍历深度」「每层路径匹配模式」「对应层级的处理函数」三个核心参数
- 每一层遍历完成后,自动执行该层级绑定的自定义操作,再进入下一层
通用遍历函数实现
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
相关产品推荐
相关产品推荐

