Python中JSON转CSV问题:仅导出表头无法写入数据
问题分析与修复方案
你的代码存在几个关键问题,导致无法正确写入所有数据:
- 文件重复打开并覆盖:在
for i in range(len(data))循环内部每次用'w'模式打开CSV文件,会清空之前写入的内容,最终只会保留最后一条数据。 - 错误的遍历逻辑:
training_data = data[i]['profile']得到的是单个字典对象,用for profile in training_data遍历的是字典的键,这会导致同一组数据被重复写入(次数等于字典键的数量)。 - 重复写入表头:每次处理一条数据都写入一次表头,导致CSV中表头重复出现。
修正后的代码
import json import csv # 读取JSON数据 with open('test1.json') as json_file: data = json.load(json_file) # 处理空数据情况 if not data: print("JSON文件为空") exit() # 从第一条数据的profile中提取表头 header = data[0]['profile'].keys() # 打开CSV文件(仅打开一次),写入表头和所有数据 with open('data_file.csv', 'w', newline='') as data_file: csv_writer = csv.writer(data_file) # 写入一次表头 csv_writer.writerow(header) # 遍历所有数据条目,依次写入对应值 for item in data: row_data = item['profile'].values() csv_writer.writerow(row_data)
代码说明
- 将CSV文件的打开操作移到外层,确保只打开一次,避免覆盖之前的数据。
- 从第一条数据的
profile中提取表头,仅写入一次。 - 直接遍历
data中的每个条目,提取profile的对应值写入CSV,去掉不必要的内层循环。 - 使用
with语句管理文件,无需手动调用close(),更安全可靠。
内容的提问来源于stack exchange,提问作者Hamza Zulquernain
相关产品推荐
相关产品推荐

