如何使用Python每日更新CSV文件 仅追加当日数据减少数据拉取量
按日期更新CSV的两种实现方案
以下两种方案均适配Mac系统,可解决日期识别异常、数据不一致问题。
方案1:增量直接追加(推荐,无需全量拉取/读取历史数据)
该方案完全符合你降低IO开销的需求,仅在首次生成CSV时全量写入,后续每次仅追加当日新数据,无需读取全量历史。
实现逻辑
- 统一所有数据的日期字段格式为
YYYY-MM-DD,从根源解决日期识别问题 - 每次写入前仅读取CSV最后10行校验是否已存在当日数据,避免重复写入导致的数据不一致
- 文件不存在时写表头,文件存在时仅追加数据不写表头,避免表头重复
参考代码
import pandas as pd import os from datetime import datetime # 配置路径,Mac路径示例:/Users/你的用户名/Documents/history_data.csv CSV_STORAGE_PATH = "/path/to/your/data.csv" TODAY_DATE = datetime.today().strftime("%Y-%m-%d") # 这里替换为你拉取到的当日数据DataFrame # 注意先统一当日数据的日期字段格式 today_data = 获取你的当日数据逻辑() today_data["date"] = pd.to_datetime(today_data["date"]).dt.strftime("%Y-%m-%d") # 校验是否已写入过当日数据 has_today_data = False try: # 仅读取最后10行,性能开销可忽略 recent_data = pd.read_csv(CSV_STORAGE_PATH, nrows=10, on_bad_lines="skip") if TODAY_DATE in recent_data["date"].values: has_today_data = True except FileNotFoundError: # 文件首次生成,无需校验 pass if not has_today_data: # 根据文件是否存在决定是否写入表头 today_data.to_csv( CSV_STORAGE_PATH, mode="a", header=not os.path.exists(CSV_STORAGE_PATH), index=False, encoding="utf-8-sig" # 适配Mac端Numbers、Excel打开不乱码 )
你当前实现的问题可参考该逻辑修复,重点统一日期格式、加重复写入校验即可。
方案2:全量合并覆写(兜底,适合需要修正历史数据的场景)
如果你的业务需要定期修正历史数据,可使用该方案,步骤如下:
实现逻辑
- 读取全量历史CSV为DataFrame,统一日期格式
- 对当日数据做相同的格式转换,保证两个DataFrame的列名、字段格式完全一致
- 拼接后按唯一标识字段去重,再覆写原CSV
参考代码
import pandas as pd import os from datetime import datetime CSV_STORAGE_PATH = "/path/to/your/data.csv" TODAY_DATE = datetime.today().strftime("%Y-%m-%d") # 读取历史数据 if os.path.exists(CSV_STORAGE_PATH): history_df = pd.read_csv(CSV_STORAGE_PATH, encoding="utf-8-sig") history_df["date"] = pd.to_datetime(history_df["date"]).dt.strftime("%Y-%m-%d") else: history_df = pd.DataFrame() # 处理当日数据 today_df = 获取你的当日数据逻辑() today_df["date"] = pd.to_datetime(today_df["date"]).dt.strftime("%Y-%m-%d") # 合并去重,subset参数替换为你能唯一标识单条数据的字段,比如日期+订单ID/数据ID full_df = pd.concat([history_df, today_df], ignore_index=True).drop_duplicates( subset=["date", "your_unique_business_id"], keep="last" ) # 覆写CSV full_df.to_csv(CSV_STORAGE_PATH, index=False, encoding="utf-8-sig")
注意事项
- 若使用覆写方案,建议定期备份CSV文件,避免写入出错丢失历史数据
- 合并前需确认两个DataFrame的列名、列顺序完全一致,避免出现空列、数据错位问题
内容的提问来源于stack exchange,提问作者Rachid Amalou
相关产品推荐
相关产品推荐

