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

使用Pendulum遍历日期周期生成每日CSV文件问题求助

解决Pendulum遍历日期仅生成第一天CSV文件的问题

嘿,我一眼就发现问题所在啦——你代码里的break语句直接终止了日期循环,程序刚处理完第一天的数据就停下了,这就是为啥你只能拿到第一个CSV文件的原因!

咱们来一步步修正这个问题,顺便优化下代码的健壮性:

原代码的核心问题

  • 循环内的break是致命错误,直接跳出了for dt in period.range('days')的遍历循环
  • 手动调用outfile.close()虽然可行,但如果代码中途抛出异常,文件可能无法正常关闭
  • 存在冗余的日期格式化操作(第一行dt.format('YYYY-MM-DD')没有赋值给变量,后面又重复格式化了一次)

修正后的代码

import csv
import requests
import pendulum

start = pendulum.datetime(2018, 1, 1)
end = pendulum.today()
period = pendulum.period(start, end)

# 遍历每一天,移除break让循环完整执行
for dt in period.range('days'):
    the_date = dt.format('YYYY-MM-DD')
    filename = f'TEST_PENDULUM_{the_date}.csv'
    
    # 使用with语句自动管理文件,无需手动close
    with open(filename, "w", newline='') as outfile:
        writer = csv.writer(outfile)
        writer.writerow(["Date"])
        
        try:
            # 发送API请求,获取当日数据
            req = requests.get(f'https://www.fantasylabs.com/api/lines/4/{the_date}/startinggoalies')
            req.raise_for_status()  # 捕获HTTP请求错误
            data = req.json()['GoalieMatchups']
            
            # 写入数据到CSV
            for teams in data:
                home_team_date = teams['Properties']['EventDate']
                print(home_team_date)
                writer.writerow([home_team_date])
        except Exception as e:
            print(f"处理日期 {the_date} 时出错: {e}")

关键改进点说明

  1. 移除break语句:让循环能够完整遍历从start到end的每一天
  2. 使用with上下文管理器:自动处理文件的打开和关闭,即使代码抛出异常也能保证文件正常关闭
  3. f-string格式化:让文件名和API请求的写法更简洁易读
  4. 增加异常处理:捕获请求失败、JSON解析错误等异常,避免程序中途崩溃,同时打印错误信息方便排查
  5. 移除冗余代码:去掉了无意义的dt.format('YYYY-MM-DD')空语句

这样修改后,程序就会为每一天生成对应的CSV文件啦!

内容的提问来源于stack exchange,提问作者Michael T Johnson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:54:22