使用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}")
关键改进点说明
- 移除
break语句:让循环能够完整遍历从start到end的每一天 - 使用
with上下文管理器:自动处理文件的打开和关闭,即使代码抛出异常也能保证文件正常关闭 - f-string格式化:让文件名和API请求的写法更简洁易读
- 增加异常处理:捕获请求失败、JSON解析错误等异常,避免程序中途崩溃,同时打印错误信息方便排查
- 移除冗余代码:去掉了无意义的
dt.format('YYYY-MM-DD')空语句
这样修改后,程序就会为每一天生成对应的CSV文件啦!
内容的提问来源于stack exchange,提问作者Michael T Johnson
相关产品推荐
相关产品推荐

