【发布时间】:2017-01-26 21:14:10
【问题描述】:
我有下面的代码来遍历我的 CSV 值。输入数据(Sample.csv):
name,city
jack,nj
matt,ny
并以 JSON 格式创建输出。所需输出
[
{"name": "jack","city": "PA"},
{"name": "matt","city": "CA"}
]
代码输出:
[{"name,city": "jack,PA"};{"name,city": "matt,CA"};]
代码示例:
#!/usr/bin/python
import json
import csv
csvfile = open('sample.csv', 'r')
jsonfile = open('sample.csv'.replace('.csv','.json'), 'w')
jsonfile.write('{\n[\n')
fieldnames = csvfile.readline().replace('\n','').split(';')
reader = csv.DictReader(csvfile, fieldnames, delimiter=';')
from collections import OrderedDict
for row in reader:
json.dump(OrderedDict([(f, row[f]) for f in fieldnames]), jsonfile, indent=4)
jsonfile.write(';\n')
jsonfile.write(']\n}')
最终输出未与键值对对齐。
【问题讨论】:
-
仅供参考,如果 CSV 文件的第一行 是 字段名称,则无需直接处理
fieldnames。此外,还不清楚为什么要手动修改输出文件中的 JSON。另外,既然分隔符明明是,,那你为什么还要继续使用;?! -
我是 Python 新手,我尝试了其他示例,但这是将值附加到列表中,这在转换超过 1 GB 的文件时会花费大量时间。相反,我想附加到 json 输出文件而不是将其保存在内存中。这是让我更接近我需要的代码其他解决方案:stackoverflow.com/a/32158933/884808
-
但是您在其中的每个项目之后都关闭了数组,并且在其中莫名其妙地使用了分号。如果您要手动编写 JSON,我建议您熟悉有效的语法。