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

Python实现字典自定义映射自动化:解决Annual文件匹配问题

自动化生成文件-日期映射字典

问题背景

当前手动维护文件与日期的映射字典,随着文件数量增加,手动维护效率极低。映射规则如下:

  • 月度文件:取Auc紧邻前方的日期作为基准日期,日固定为1
  • Annual文件:年份取Annual后的数字,月份固定为1,日期取文件名中的Round编号

原代码仅能处理月度文件,无法匹配Annual文件,原因是正则表达式_(\w{3}\d{2})Auc_仅匹配"三个字母+两位数字+Auc"的格式,而Annual文件的格式是Annual21Auc,不符合该正则规则。

解决方案

修改正则表达式,使其同时匹配月度文件和Annual文件的日期标识,再根据文件类型分别处理日期生成逻辑:

完整代码

import os
import re
from datetime import datetime

path = "你的文件路径"  # 替换为实际文件夹路径
folder_list = [x for x in os.listdir(path) if 'MarketResults' in x]

mapping = {}

# 正则匹配两种格式:月度(如Dec21)和Annual(如Annual21)
pattern = r'_(Annual\d{2}|\w{3}\d{2})Auc_'

for filename in folder_list:
    match = re.search(pattern, filename)
    if not match:
        print(f"无法匹配文件:{filename}")
        continue
    
    date_segment = match.group(1)
    # 处理Annual文件
    if date_segment.startswith('Annual'):
        # 提取年份:取Annual后的两位数字,转为完整年份
        year = 2000 + int(date_segment[6:])
        month = 1
        # 提取Round编号作为日期
        round_match = re.search(r'Round_(\d)', filename)
        day = int(round_match.group(1)) if round_match else 1
    # 处理月度文件
    else:
        # 解析月份和年份,日固定为1
        date_obj = datetime.strptime(date_segment, '%b%y')
        year = date_obj.year
        month = date_obj.month
        day = 1
    
    mapping[filename] = datetime(year, month, day)

# 打印测试结果
for file, date in mapping.items():
    print(f"{file}: {date}")

代码说明

  • 正则表达式优化:_(Annual\d{2}|\w{3}\d{2})Auc_使用分支匹配,同时捕获Annual+两位数字和三个字母+两位数字两种格式
  • Annual文件处理:从捕获的Annual21中提取年份转为完整年份,月份固定为1,通过额外正则提取Round编号作为日期
  • 月度文件处理:保持原有逻辑,解析Dec21为对应年月,日固定为1
  • 异常处理:增加匹配失败提示,避免程序中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:52:46