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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:57:25