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

如何用Python的glob库高效实现文件名多条件过滤?

解决Python glob多条件日期文件名过滤的问题

你的问题核心是误解了glob的通配符语法:glob里的[xxx]是单个字符的字符集匹配,不是范围匹配,比如[2022-2023]只会匹配2、0、-、3这些单个字符,完全达不到匹配2022/2023年份的效果,这才导致过滤范围出错。

针对你的需求,推荐两种高效的结构化方法:

方法一:先glob粗匹配,再用Python解析日期过滤(最通用)

先用glob获取所有符合基本格式的文件,再提取文件名中的日期信息,用datetime模块做精准判断,这种方法灵活易维护,适合大部分场景。

示例代码:

import glob
from datetime import datetime

folder_path = "..."
# 先匹配所有带8位日期+A+4位时间的.pq文件
all_files = glob.glob(f"{folder_path}/*_????????A????.pq")

filtered_files = []
for file in all_files:
    # 提取文件名中的8位日期部分(按你的文件名格式分割)
    date_str = file.split("_")[-1].split("A")[0]
    try:
        file_date = datetime.strptime(date_str, "%Y%m%d")
        # 判断条件:2022-2023年,1-6月,1-15日
        if (2022 <= file_date.year <= 2023 
            and 1 <= file_date.month <=6 
            and 1 <= file_date.day <=15):
            filtered_files.append(file)
    except ValueError:
        # 跳过格式不符合的文件
        continue

print(filtered_files)

如果文件名格式有变化,也可以用正则表达式提取日期:

import re
pattern = re.compile(r'(\d{8})A')
for file in all_files:
    match = pattern.search(file)
    if match:
        date_str = match.group(1)
        # 后续判断逻辑同上

方法二:预生成符合条件的日期模式,用glob批量匹配(更高效)

如果你的日期范围固定(2022-2023年1-6月前15天),可以先生成所有符合条件的日期字符串,再构造对应的glob模式,让glob直接过滤出目标文件,减少后续处理的工作量。

示例代码:

import glob
from datetime import datetime, timedelta

folder_path = "..."

# 生成所有符合条件的日期字符串(yyyyMMdd格式)
start_date = datetime(2022, 1, 1)
end_date = datetime(2023, 6, 15)
date_patterns = []

current_date = start_date
while current_date <= end_date:
    # 跳过7-12月的日期,直接跳到下一年1月
    if current_date.month >6:
        current_date = datetime(current_date.year +1, 1, 1)
        continue
    date_str = current_date.strftime("%Y%m%d")
    date_patterns.append(f"{folder_path}/*{date_str}A*.pq")
    current_date += timedelta(days=1)

# 批量匹配所有模式的文件
filtered_files = []
for pattern in date_patterns:
    filtered_files.extend(glob.glob(pattern))

# 按需去重
filtered_files = list(set(filtered_files))
print(filtered_files)

两种方法对比

  • 方法一:无需提前生成日期列表,适配文件名格式变动,代码可读性高,适合日期范围大或者文件名格式不固定的场景。
  • 方法二:直接让glob做过滤,减少Python层面的循环判断,效率更高,适合日期范围明确且较小的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:06:39