如何提取文件名中的日期时间并转换为datetime对象?
错误原因
- 变量名不匹配:你定义的存储文件名的变量是
my_string,但正则匹配时调用的是未定义的file_name,直接导致匹配结果为空 - 正则表达式规则错误:你写的
_(.\d+)_ab.txt只能匹配「下划线+任意单个字符+连续数字」的组合,无法匹配目标串里的-、u、m、s等字符,最终匹配返回None,调用group方法就会报错
完整实现代码
import re import datetime my_string = 'Afo_20211024-19u37m11s_ab.txt' # 修正正则规则和调用的变量名,精准匹配时间部分 match_res = re.search(r"_(\d{8}-\d{2}u\d{2}m\d{2}s)_ab\.txt", my_string) if match_res: time_str = match_res.group(1) # 按字符串格式解析为datetime类型对象 dt_obj = datetime.datetime.strptime(time_str, "%Y%m%d-%Hu%Mm%Ss") # 如果需要输出为指定格式的字符串,调用strftime即可 formatted_str = dt_obj.strftime("%Y-%m-%d %H:%M:%S") print(formatted_str) # 输出结果:2021-10-24 19:37:11 else: print("文件名未匹配到符合规则的时间信息")
实现说明
- 正则
r"_(\d{8}-\d{2}u\d{2}m\d{2}s)_ab\.txt"严格匹配8位日期、分隔符-、2位小时、标识u、2位分钟、标识m、2位秒、标识s的固定格式,避免误匹配 - 先判断匹配结果是否为空再调用
group方法,避免匹配失败时报错 strptime的格式符和时间字符串一一对应:%Y对应4位年份、%m对应2位月份、%d对应2位日期、%H对应2位小时、%M对应2位分钟、%S对应2位秒,解析后直接得到你需要的datetime类型对象
内容的提问来源于stack exchange,提问作者Al-Andalus
相关产品推荐
相关产品推荐

