Python每日提取指定日期记录并追加至CSV的实现问题
每日运行Python脚本提取指定日期记录并追加至CSV的实现方案
需求说明
每日运行Python脚本,从包含startdate、enddate、virtual_id、value四列的数据集中提取指定日期的所有记录,并将结果追加到同一个CSV文件中。
示例数据集
import pandas as pd data = {'startdate': {0:'2022-12-19 06:01:12+00:00', 1: '2022-12-19 13:49:09+00:00', 2: '2022-12-19 13:20:36+00:00', 3: '2022-12-08 13:55:09+00:00', 4: '2022-12-08 13:32:36+00:00', 5: '2023-01-09 15:14:07+00:00', 6: '2023-01-09 15:16:35+00:00'}, 'enddate': {0:'2022-12-19 06:25:06+00:00', 1: '2022-12-19 13:59:29+00:00', 2: '2022-12-19 13:26:40+00:00', 3: '2022-12-08 13:55:27+00:00', 4: '2022-12-08 13:45:41+00:00', 5: '2023-12-09 15:29:39+00:00', 6: '2023-01-09 15:28:43+00:00'}, 'virtual_id': {0: 1122, 1: 1125, 2: 1144,3: 1100, 4: 1136, 5: 1181, 6:1188}, 'value': {0:2000, 1: 5000, 2: 70000, 3: 8000, 4: 90000,5: 7200, 6: 81000} } df = pd.DataFrame(data)
提取规则
- 若1月9日运行脚本,提取2022-12-08的所有记录
- 若1月10日运行脚本,提取2023-01-09的所有记录
错误尝试代码
# 错误代码片段 data = data[data.startdate == data.startdate.max()] & data[data.enddate == data.enddate.max()] data = data.loc[[data.enddate.idxmax()]]
正确实现方案
步骤说明
- 将日期列转换为
datetime类型,方便日期筛选 - 根据当前运行日期计算目标提取日期
- 筛选出
startdate日期部分与目标日期匹配的所有记录 - 将结果追加到指定CSV文件(自动处理文件不存在的情况)
完整代码
import pandas as pd from datetime import datetime, timedelta def extract_and_append_records(df, csv_path): # 1. 转换startdate列为datetime类型,提取日期部分 df['startdate'] = pd.to_datetime(df['startdate']) df['start_date_only'] = df['startdate'].dt.date # 2. 获取当前运行日期 run_date = datetime.today().date() # 3. 根据运行日期计算目标提取日期(按需求规则) if run_date == datetime(2023, 1, 9).date(): target_date = datetime(2022, 12, 8).date() elif run_date == datetime(2023, 1, 10).date(): target_date = datetime(2023, 1, 9).date() else: # 可根据实际需求扩展其他日期的规则,比如默认提取前一天的记录 target_date = run_date - timedelta(days=1) # 4. 筛选目标日期的所有记录 filtered_df = df[df['start_date_only'] == target_date].drop(columns=['start_date_only']) # 5. 追加到CSV文件:若文件不存在则创建并写入表头,否则追加且不写表头 filtered_df.to_csv(csv_path, mode='a', header=not pd.io.common.file_exists(csv_path), index=False) return filtered_df # 调用示例 csv_file = 'daily_records.csv' result = extract_and_append_records(df, csv_file) print("提取的记录:") print(result)
代码说明
- 日期转换:使用
pd.to_datetime将字符串格式的日期转为datetime类型,再通过dt.date提取纯日期部分,便于匹配筛选 - 目标日期计算:针对用户给出的两个运行日期做了硬编码匹配,可根据实际需求扩展规则(比如通用规则为提取运行日期的前一天记录)
- CSV追加:通过
mode='a'实现追加写入,header参数自动判断是否需要写入表头,避免重复表头 - 结果返回:返回筛选后的DataFrame,方便调试或后续处理
通用化扩展
如果需要更通用的规则(比如每日提取前一天的记录),可将目标日期计算部分修改为:
# 通用规则:提取运行日期的前一天记录 target_date = run_date - timedelta(days=1)
内容的提问来源于stack exchange,提问作者s nandan
相关产品推荐
相关产品推荐

