如何在Python中为CSV添加提取自文件名的StatementDate列?
解决方案
1. 用正则提取文件名中的日期
当然可以,你的文件名里日期是MM-DD-YYYY格式,用\d{2}-\d{2}-\d{4}这个正则模式就能精准匹配出两位月-两位日-四位年的日期串。
示例代码:
import re filename = "011J9O00_WA_07-10-2024.csv" # 匹配并提取日期 date_match = re.search(r'\d{2}-\d{2}-\d{4}', filename) statement_date = date_match.group() if date_match else None
2. 解决"data is not defined"报错并完成列插入
你遇到的报错是因为没把CSV内容正确读取到DataFrame对象里,或者变量名搞混了(比如定义了data却用df调用)。完整流程如下:
import re import pandas as pd filename = "011J9O00_WA_07-10-2024.csv" # 第一步:读取CSV到DataFrame,这步是核心,缺失会导致变量未定义报错 df = pd.read_csv(filename) # 提取日期 date_match = re.search(r'\d{2}-\d{2}-\d{4}', filename) if not date_match: raise ValueError("文件名中未找到符合格式的日期") statement_date = date_match.group() # 插入列到第0位,直接传入日期值会自动填充整列所有行 df.insert(loc=0, column='StatementDate', value=statement_date) # 保存修改后的CSV文件 df.to_csv(f"updated_{filename}", index=False)
批量处理多个CSV的情况
如果要处理文件夹下所有CSV文件,套个循环即可:
import os import re import pandas as pd folder_path = "./your_csv_folder" # 替换成你的CSV文件夹路径 for filename in os.listdir(folder_path): if filename.endswith(".csv"): file_full_path = os.path.join(folder_path, filename) df = pd.read_csv(file_full_path) date_match = re.search(r'\d{2}-\d{2}-\d{4}', filename) if date_match: statement_date = date_match.group() df.insert(loc=0, column='StatementDate', value=statement_date) # 覆盖原文件保存,或者重命名为新文件 df.to_csv(file_full_path, index=False) # 重命名保存示例:df.to_csv(os.path.join(folder_path, f"processed_{filename}"), index=False)
内容的提问来源于stack exchange,提问作者Jacob Lindsey
相关产品推荐
相关产品推荐

