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

如何从测试文件指定字段提取datetime字符串并转换为指定日期格式

问题直接原因

你触发报错的核心是把re.search返回的匹配对象直接传给了re.sub,后续把返回的字符串当做匹配对象调用group方法,同时代码存在正则不匹配、拼写错误、缩进错误、逻辑流程错误等多个问题,修复方案如下:

修复后完整可运行代码

import re
import os
from datetime import datetime

basepath = r"C:\Users\xyz\test"

def extract_date(fn):
    # 正则适配测试文本的CST时区、双冒号时间格式
    pattern = r'Tested on: \S+ (\S+) (\d+) \d+::\d+:\d+ CST (\d+)'
    with open(fn, encoding='utf-8', errors='ignore') as f:
        for s in f:
            m = re.search(pattern, s)
            if m:
                # 直接从匹配对象取对应分组,无需冗余替换
                month_str = m.group(1)
                day = m.group(2)
                year = m.group(3)
                # 用%b自动匹配月份缩写,无需手动做映射
                date_obj = datetime.strptime(f"{day} {month_str} {year}", "%d %b %Y")
                # 要输出月份数字用'%d/%m/%Y',要输出月份缩写用'%d/%b/%Y'
                dt_out = date_obj.strftime('%d/%m/%Y')
                return (os.path.basename(fn), dt_out)
    return None

if __name__=="__main__":
    dates = []
    for root, _, filenames in os.walk(basepath):
        for filename in filenames:
            full_path = os.path.join(root, filename)
            res = extract_date(full_path)
            if res:
                dates.append(res)
                print(res)
    print("所有提取结果:", dates)

主要改动点

  • 修正缩进错误:原函数内读取文件行的逻辑完全没有正确缩进,导致只读取了文件最后一行甚至未读取
  • 修正正则表达式:将错误的时区AET改为测试文本中的CST,适配现有文本格式
  • 修正拼写错误:将错写的dataetime改为正确的datetime,并调整导入逻辑
  • 删除冗余的re.sub逻辑:匹配成功后直接从匹配对象取对应分组,无需做字符串替换
  • 修正日期解析格式:用%b匹配月份缩写(Mar对应3月),无需手动做月份映射
  • 修复路径拼接逻辑:用os.path.join拼接路径,避免不同系统的路径分隔符兼容问题
  • 补充返回值收集逻辑:将所有文件的匹配结果存入dates列表统一处理

如果你需要输出的是31/Mar/2021格式的日期,只需要把strftime的格式字符串改为'%d/%b/%Y'即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 18:36:02