Python遍历月份生成API链接时如何在当前月份停止迭代
修复方案
原脚本问题是月份遍历写死1-12月、年份写死到2022,运行时会请求未到来的未来月份,接口无有效返回就会触发中断。修改逻辑如下:
- 引入
datetime模块获取脚本运行时的当前年份、月份,作为遍历终止的判断基准 - 分层控制遍历范围:处理往年数据时正常遍历1-12月,处理当前年数据时只遍历到当月,未到来的年份直接跳过,从根源上避免生成无效请求链接
- 保留原有请求头、接口参数、JSON导出逻辑,不改动原有数据拉取规则
修改后完整代码
import calendar import requests import json from datetime import datetime pointId = ['9804', '9805'] # 获取运行时的当前年月作为遍历终止边界 current_dt = datetime.now() current_year = current_dt.year current_month = current_dt.month def get_datas(year): for point in pointId: # 动态确定当前年份需要遍历的最大月份 if year < current_year: max_month = 12 elif year == current_year: max_month = current_month else: # 超过当前年直接终止遍历 return for month in range(1, max_month + 1): r = calendar.monthrange(year, month) start = f"{year}-{month:0>2d}-01" end = f"{year}-{month:0>2d}-{r[1]}" url = f"https://live.api/raw?pointID={point}&startDateUTC={start}&endDateUTC={end}&interval=mm&summed=1&productTypeID=2" print(url) payload={} headers = { 'Authorization': 'Bearer abcdefg1234556' } response = requests.request("GET", url, headers=headers, data=payload) data = json.loads(response.text) yield data datas = [] # 年份遍历自动适配,从2020年跑到当前年即可,不需要手动维护年份列表 for year in range(2020, current_year + 1): datas.extend(get_datas(year)) with open('PS_Consumption.json', 'w') as json_file: json.dump(datas, json_file, indent=4)
关键修改说明
- 新增的时间判断逻辑不需要手动写死终止年月,脚本每次运行都会自动适配当前时间,后续年份使用不需要手动改代码
- 原写死的2020-2022年份遍历逻辑改为动态范围,自动覆盖从2020年到运行当月的所有有效时间段
- 无效的未来月份请求会在循环层直接被拦截,不会发起实际HTTP请求,避免无数据导致的解析中断
内容的提问来源于stack exchange,提问作者Taariq Toffar
相关产品推荐
相关产品推荐

