如何用Pandas将脚本结果按格式写入并实现CSV每日追加更新
问题描述
我是Python新手,接触pandas时间更短,还请见谅新手错误。目前我的脚本能统计其他脚本生成的CSV文件行数,正确存为totalDailyListings,也做了日期格式化,用来统计前一天的房源数据。
当前待统计的CSV结构:
| Address | Price |
|---|---|
| 123 Main St | £305,000 |
| 55 Chance Way | £200,000 |
我的代码:
from datetime import date, timedelta import pandas as pd # 原代码漏了导入pandas oneday = timedelta(days=1) yesterdayDate = date.today() - oneday filename = 'ballymena-' + str(yesterdayDate) + '.csv' results = pd.read_csv(filename) totalDailyListings = len(results) # 计算CSV的正确行数 listings = pd.DataFrame( [yesterdayDate, totalDailyListings], columns=['Date', 'Total']) listings.to_csv('listings-count.csv')
现在无法创建一个仅含Date和Total两列、能每日追加行用于长期监控的CSV文件,期望的CSV格式:
| Date | Total |
|---|---|
| 2022-10-04 | 305 |
| 2022-10-05 | 200 |
解决步骤
- 修复DataFrame创建错误
原代码创建listings的方式不对,[yesterdayDate, totalDailyListings]会生成两行单列的数据,而非一行两列。正确写法二选一:
# 方式1:字典列表(更直观) listings = pd.DataFrame([{'Date': yesterdayDate, 'Total': totalDailyListings}]) # 方式2:二维列表+列名 listings = pd.DataFrame([[yesterdayDate, totalDailyListings]], columns=['Date', 'Total'])
- 实现追加写入逻辑
用to_csv的mode='a'开启追加模式,同时判断目标文件是否存在:文件不存在时写入表头,存在则跳过表头避免重复。完整代码如下:
from datetime import date, timedelta import pandas as pd import os oneday = timedelta(days=1) yesterdayDate = date.today() - oneday # 可选:格式化日期确保格式统一 yesterdayDate_str = yesterdayDate.strftime('%Y-%m-%d') filename = f'ballymena-{yesterdayDate_str}.csv' # 读取待统计CSV并计数 try: results = pd.read_csv(filename) totalDailyListings = len(results) except FileNotFoundError: print(f"警告:未找到文件 {filename}") totalDailyListings = 0 # 根据需求处理缺失情况 # 创建正确的统计DataFrame listings = pd.DataFrame([{'Date': yesterdayDate_str, 'Total': totalDailyListings}]) # 追加写入统计CSV target_file = 'listings-count.csv' if os.path.exists(target_file): listings.to_csv(target_file, mode='a', header=False, index=False) else: listings.to_csv(target_file, index=False)
- 额外优化提示
- 加入
try-except捕获文件缺失异常,避免脚本直接崩溃; - 用
strftime格式化日期,保证日期格式统一为YYYY-MM-DD; - 用f-string拼接文件名,代码更简洁。
内容的提问来源于stack exchange,提问作者cts
相关产品推荐
相关产品推荐

