Python实现CSV转JSON仅读取首尾行数据问题排查
问题根因
索引自增逻辑写错了:你写的i =+ 1不是累加操作,等价于i = +1,每次循环执行完这行i的值都会被固定重置为1,不会逐次递增。
对应你的测试数据,实际执行流程是:
- 第一次循环(读取John行):i初始值为0,把John行存在
data[0],然后执行i =+1,i变成1 - 第二次循环(读取Fred行):把Fred行存在
data[1],然后执行i =+1,i还是1 - 第三次循环(读取Michelle行):直接覆盖
data[1]的原有值(也就是Fred那行数据),存成Michelle行,执行完i还是1
所以最终输出的JSON里只会剩下索引0的首行John、索引1被最后一次循环覆盖的末行Michelle,中间的Fred行因为索引重复被覆盖丢失了。
修复方案
把错误的自增语句i =+ 1改成正确的累加写法i += 1即可,修复后的代码如下:
import csv import json data = {} with open(file, "rt") as csvf: csvReader = csv.DictReader(csvf) i = 0 for rows in csvReader: data[i] = rows i += 1 jsondata = json.dumps(data, indent=4) print("jsondata is: ", jsondata)
如果不想手动维护索引,也可以直接用enumerate自动生成遍历索引,代码更简洁不容易写错:
import csv import json data = {} with open(file, "rt") as csvf: csvReader = csv.DictReader(csvf) for i, rows in enumerate(csvReader): data[i] = rows jsondata = json.dumps(data, indent=4) print("jsondata is: ", jsondata)
修复后运行就能得到包含全部三行数据的正确JSON结果。
内容的提问来源于stack exchange,提问作者Kaiss B.
相关产品推荐
相关产品推荐

