循环生成数据集并保存为多文件的报错排查
问题分析与修正方案
核心错误点
- 循环范围错误:你写的
for m in muni[1]:是遍历muni列表里的第二个元组(("https://openbilanci.it/...", "partanna")),这会导致m先取URL,再取字符串"partanna"——第二次循环时用"partanna"当URL请求必然报错,还完全没处理第一个和第三个市政的数据。 - 文件命名错误:
df.to_csv(muni[2]+"dak.csv", ...)里的muni[2]是整个第三个元组(包含URL和名称),把元组和字符串拼接就会触发你遇到的TypeError。
修正后的代码
import re import json import requests import pandas as pd import os import random os.chdir(r"/Users/aartimalik/Dropbox/data") muni = [ ("https://openbilanci.it/armonizzati/bilanci/filettino-comune-fr/entrate/dettaglio?year=2021&type=preventivo", "filettino"), ("https://openbilanci.it/armonizzati/bilanci/partanna-comune-tp/entrate/dettaglio?year=2021&type=preventivo","partanna"), ("https://openbilanci.it/armonizzati/bilanci/fragneto-labate-comune-bn/entrate/dettaglio?year=2021&type=preventivo", "fragneto-labate") ] # 遍历整个muni列表,直接解构每个元组的URL和市政名称 for url, name in muni: r = requests.get(url) p = re.compile("var bilancio_tree = (.*?);") data = p.search(r.text).group(1) data = json.loads(data) all_data = [] for d in data: for v in d["values"]: for kk, vv in v.items(): all_data.append([d["label"], "-", kk, vv.get("abs"), vv.get("pc")]) for c in d["children"]: for v in c["values"]: for kk, vv in v.items(): all_data.append( [d["label"], c["label"], kk, vv.get("abs"), vv.get("pc")] ) df = pd.DataFrame(all_data, columns=["label 1", "label 2", "year", "abs", "pc"]) # 用当前循环的市政名称生成对应文件名 df.to_csv(f"{name}dak.csv", index=False)
关键修改说明
- 循环改为
for url, name in muni:,直接解构每个元组的URL和名称,一次处理一个市政的数据,覆盖所有目标。 - 文件命名用
f"{name}dak.csv",用当前循环的name变量生成对应文件名,比如第一个市政会生成filettinodak.csv,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Pepa
相关产品推荐
相关产品推荐

