如何解决Python CSV转JSON时仅存最后一行、无法保存全部行的问题
问题根因
你的代码存在两个核心错误:
- 循环内每次对
data2直接赋值为当前行,会覆盖上一次遍历的行数据,没有把所有行累计存储 - 循环内部每次都以
w(覆盖写入)模式打开JSON文件,每次写入都会清空文件原有内容,最终只会保留最后一次写入的行数据 - 原函数定义的第一个参数
myFile完全未被使用,代码硬编码了读取的CSV文件名,灵活性差
修正后代码
import csv import simplejson def make_json(csvFilePath, jsonFilePath): # 定义列表存储所有行数据 all_data = [] with open(csvFilePath, encoding='utf-8') as csvf: csvReader = csv.DictReader(csvf) # 遍历所有行,逐个追加到列表避免覆盖 for row in csvReader: all_data.append(row) # 所有行读取完成后一次性写入JSON文件 with open(jsonFilePath, 'w', encoding='utf-8') as jsonf: jsonf.write(simplejson.dumps(all_data, indent=4)) # 调用示例 # make_json('CSVFile.csv', 'output.json')
修改说明
- 把原本单字典类型的
data2改为列表类型的all_data,遍历过程中用append方法把每一行数据追加到列表里,不会覆盖历史数据 - 将JSON文件写入操作移出遍历循环,等所有行都读取完成后,一次性把完整的列表写入文件,避免反复覆盖文件内容
- 修复了原函数参数未使用、硬编码CSV文件名的问题,可通过参数灵活指定要读取的CSV文件路径
内容的提问来源于stack exchange,提问作者user1575945
相关产品推荐
相关产品推荐

