如何用Python合并198个同结构国家API JSON并转CSV?
合并多JSON文件并转CSV的Python方案
下面分步骤实现你的需求,包括合并已下载的JSON文件,以及直接从API获取并完成合并转换两种方式:
一、合并已下载的JSON文件
假设所有data_COU-XXXX.json文件都在当前工作目录下,执行以下代码即可合并成一个有效的JSON数组:
import json import os all_data = [] # 遍历目录下的目标JSON文件 for file_name in os.listdir('.'): if file_name.startswith('data_COU-') and file_name.endswith('.json'): with open(file_name, 'r', encoding='utf-8') as f: country_data = json.load(f) all_data.append(country_data) # 保存合并后的JSON with open('merged_countries.json', 'w', encoding='utf-8') as f: json.dump(all_data, f, ensure_ascii=False, indent=4)
二、将合并后的JSON转为CSV
用pandas库可以快速完成格式转换,先确保安装了pandas(执行pip install pandas),再运行以下代码:
import pandas as pd import json # 读取合并后的JSON with open('merged_countries.json', 'r', encoding='utf-8') as f: merged_data = json.load(f) # 转为DataFrame并保存为CSV df = pd.DataFrame(merged_data) df.to_csv('countries_data.csv', index=False, encoding='utf-8-sig')
三、优化方案:直接从API获取+合并+转换(无需逐个下载文件)
如果不想先下载所有JSON文件,可以修改原代码,一步完成数据获取、合并和格式转换,节省磁盘空间和操作步骤:
import requests import json import pandas as pd url_base = "https://zerotracker.net/api/v1/countries/{}" codes = [f"COU-{i:04d}" for i in range(1, 199)] all_countries = [] for code in codes: url = url_base.format(code) print(f"处理 {code}...") try: resp = requests.get(url) resp.raise_for_status() # 捕获请求错误 all_countries.append(resp.json()) except Exception as e: print(f"{code} 数据获取失败:{str(e)}") # 保存合并JSON with open('merged_countries.json', 'w', encoding='utf-8') as f: json.dump(all_countries, f, ensure_ascii=False, indent=4) # 转CSV pd.DataFrame(all_countries).to_csv('countries_data.csv', index=False, encoding='utf-8-sig') print("所有操作完成")
关键提示
- 确保每个JSON文件的字段结构完全一致,否则CSV转换时可能出现字段错位或缺失。
- 使用
utf-8-sig编码保存CSV,能避免Excel打开时的中文乱码问题。 - 异常处理部分可以根据需要调整,比如跳过错误数据或记录错误日志。
内容的提问来源于stack exchange,提问作者NotGreatAtCoding
相关产品推荐
相关产品推荐

