如何用Python从文件名提取日期时间并拆分至date、time列?
解决文件名日期时间提取问题
问题根源
你的脚本存在两个核心问题:
- 错误地将
re.split返回的列表转为字符串,导致传入strptime的是整个列表的字符串表示,而非目标日期时间片段 - 使用的格式串
%Y-%m-%d-%H-%M-%S与文件名中200605202252的格式(无分隔符的%Y%m%d%H%M%S)不匹配
正确实现脚本
下面是可以实现需求的代码,包含两种常见处理方式:
方式1:字符串分割提取(适合固定格式文件名)
from datetime import datetime import pandas as pd file_name = "CCN-200 data 200605202252.csv" # 按空格分割取最后一段,再移除.csv后缀 dt_str = file_name.split()[-1].replace(".csv", "") # 解析无分隔符的日期时间字符串 dt = datetime.strptime(dt_str, "%Y%m%d%H%M%S") # 格式化为目标样式 target_date = dt.strftime("%Y-%m-%d") target_time = dt.strftime("%H:%M:%S") # 存入DataFrame df = pd.DataFrame() df['date'] = [target_date] df['time'] = [target_time] print(df)
方式2:正则表达式匹配(适合格式多变的文件名)
from datetime import datetime import pandas as pd import re file_name = "CCN-200 data 200605202252.csv" # 匹配文件名中的12位数字日期时间片段 match = re.search(r'(\d{12})', file_name) if match: dt_str = match.group(1) dt = datetime.strptime(dt_str, "%Y%m%d%H%M%S") target_date = dt.strftime("%Y-%m-%d") target_time = dt.strftime("%H:%M:%S") df = pd.DataFrame() df['date'] = [target_date] df['time'] = [target_time] print(df) else: print("未找到有效日期时间片段")
输出结果
运行代码后会生成符合要求的DataFrame:
date time 0 2006-05-20 22:52:00
注:你的期望输出中日期2020-06-05与文件名中的20060520不符,上述代码基于文件名实际内容生成结果。
内容的提问来源于stack exchange,提问作者Arindam Das
相关产品推荐
相关产品推荐

