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

使用os.walk与正则表达式筛选指定DOY范围文件夹内的目标文件

优化实现方案

原来手动维护排除集合的方式适配性很差,一旦调整DOY起止范围就要重新生成排除列表,效率非常低。可以直接在遍历文件夹时动态提取DOY编号做区间判断,代码更简洁,适配性也更强。

优化后的代码如下:

import os
import re
from shutil import copy2

DOY_START = 109
DOY_END = 158
# 匹配文件名的正则可根据实际需求调整
file_regex = re.compile(r'(file1_regex\.txt)|file2_regex\.txt')
# 匹配DOY格式文件夹名,提取后面的数字编号
doy_dir_regex = re.compile(r'^DOY(\d+)$')

rootdir = "C:/Users/Inputs/..."
output_dir = "C:/Users/Outputs/..."

for root, dirs, files in os.walk(rootdir, topdown=True):
    # 只保留命名符合DOY格式、且编号在目标区间的文件夹
    dirs[:] = [
        d for d in dirs 
        if (match_res := doy_dir_regex.match(d)) 
        and DOY_START <= int(match_res.group(1)) <= DOY_END
    ]
   
    for file in files:
        if file_regex.match(file):
            full_file_path = os.path.join(root, file)
            copy2(full_file_path, output_dir)

核心改动说明

  • 去掉了手动维护的排除集合,新增DOY文件夹名的匹配规则,自动提取编号做区间判断,后续调整处理范围时只需要修改DOY_START和DOY_END两个变量即可
  • 路径拼接改用os.path.join,自动适配不同操作系统的路径分隔符,避免手动拼接斜杠出错的问题
  • 如果你使用的是Python3.8以下版本,不支持海象运算符:=,可以把文件夹过滤的列表推导式替换为兼容写法:
valid_dirs = []
for d in dirs:
    match_res = doy_dir_regex.match(d)
    if match_res and DOY_START <= int(match_res.group(1)) <= DOY_END:
        valid_dirs.append(d)
dirs[:] = valid_dirs

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:00:07