You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:15:02