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

Python循环拉取月度API数据导出JSON仅存最后一月,如何存储全部数据?

问题原因

你当前代码的问题出在循环内的文件写入逻辑:

  • 每次循环都以**写入模式w**打开data.json,该模式会直接清空文件原有内容再写入新数据,因此前11个月的写入结果都会被后一个月的覆盖,最终仅保留最后一个月的数据。
  • 另外你当前每次写入的都是单月独立的JSON结构,直接拼接也会导致最终文件不是合法的JSON格式。

推荐修改方案(生成标准合法JSON)

先在循环外初始化一个列表存储所有月份的数据,全部请求完成后统一写入文件,修改后代码如下:

import calendar
from urllib.request import urlopen
import json

year = 2021
# 此处补充你自己的token、clientId、siteId赋值
token = "你的接口token"
clientId = "你的clientId"
siteId = "你的siteId"
# 初始化总列表存储所有月份的用电数据
all_data = []

for month in range(1, 13):
    r = calendar.monthrange(year, month)
    start = f"{year}-{month:0>2d}-01"
    end = f"{year}-{month:0>2d}-{r[1]}"
    
    url = f"apilink/getKwh?token={token}&clientId={clientId}&siteId={siteId}&from={start}&to={end}"

    response = urlopen(url)
    month_data = json.loads(response.read())
    # 将当月数据追加到总列表中
    all_data.extend(month_data["data_json"])

# 所有月份请求完成后,统一构造最终JSON结构写入文件
final_result = {"data_json": all_data}
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(final_result, f, ensure_ascii=False, indent=2)

修改后最终的data.json为符合规范的JSON文件,结构和你单月返回的结构完全一致,仅data_json数组内会包含12个月的所有数据。

可选方案:生成JSON Lines格式(逐行追加)

如果你需要每行存储一个单月JSON的格式(适合大数据流式处理场景),可以直接使用追加模式a写入,代码修改如下:

import calendar
from urllib.request import urlopen
import json

year = 2021
token = "你的接口token"
clientId = "你的clientId"
siteId = "你的siteId"

for month in range(1, 13):
    r = calendar.monthrange(year, month)
    start = f"{year}-{month:0>2d}-01"
    end = f"{year}-{month:0>2d}-{r[1]}"
    
    url = f"apilink/getKwh?token={token}&clientId={clientId}&siteId={siteId}&from={start}&to={end}"

    response = urlopen(url)
    data = json.loads(response.read())
    # 追加模式写入,每写完一个月加换行符
    with open("data.json", "a", encoding="utf-8") as f:
        f.write(json.dumps(data, ensure_ascii=False) + "\n")

注意该格式不是标准JSON,读取时需要逐行解析加载。

内容的提问来源于stack exchange,提问作者Taariq Toffar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:27:00