如何修改Python代码遍历siteId列表将多站点数据写入JSON文件
调整后可遍历siteId列表的代码
import calendar from urllib.request import urlopen import json # 请自行补充以下两个参数的实际取值 token = "你的实际token值" clientId = "你的实际clientId值" # 把需要拉取的所有站点ID放到这个列表即可 site_id_list = ['416', '414', '207', '233', '237', '251', '262', '276'] # 导出文件名调整为全站点标识,也可自定义命名规则 filename = f'{clientId}-all_sites.json' def get_datas(year, site_id): 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={site_id}&from={start}&to={end}" response = urlopen(url) data = json.loads(response.read()) # 可选:给每条数据追加站点ID标识,方便后续区分数据归属 data['siteId'] = site_id yield data datas = [] # 外层新增站点ID遍历逻辑 for site_id in site_id_list: for year in (2019, 2020, 2021): datas.extend(get_datas(year, site_id)) with open(filename, "w", encoding="utf-8") as f: json.dump(datas, f, indent=4, ensure_ascii=False)
核心改动说明
- 将原代码单个
siteId变量替换为site_id_list列表,可灵活自定义需要拉取的站点范围 - 给
get_datas函数新增site_id入参,替换原函数调用的全局siteId变量,避免遍历冲突 - 新增编码参数避免导出的JSON文件出现中文乱码问题
- 若需要每个站点单独导出一个JSON文件,只需把文件写入逻辑放到站点遍历循环内即可,示例如下:
for site_id in site_id_list: datas = [] for year in (2019, 2020, 2021): datas.extend(get_datas(year, site_id)) # 每个站点生成独立的导出文件 filename = f'{clientId}-{site_id}.json' with open(filename, "w", encoding="utf-8") as f: json.dump(datas, f, indent=4, ensure_ascii=False)
内容的提问来源于stack exchange,提问作者Taariq Toffar
相关产品推荐
相关产品推荐

