这是我的代码,非常简单的东西…
import csv import json csvfile = open('file.csv', 'r') jsonfile = open('file.json', 'w') fieldnames = ("FirstName","LastName","IDNumber","Message") reader = csv.DictReader( csvfile, fieldnames) out = json.dumps( [ row for row in reader ] ) jsonfile.write(out)
声明一些字段名称,阅读器使用CSV读取文件,并使用字段名称将文件转储为JSON格式。这是问题所在…
CSV文件中的每个记录都在不同的行上。我希望JSON输出采用相同的方式。问题在于,将其全部倾倒在一条长长的巨线上。
我试过使用类似的for line in csvfile:代码,然后在该代码下面运行我的代码,reader = csv.DictReader( line, fieldnames)该代码循环遍历每一行,但它在一行上执行整个文件,然后在另一行上遍历整个文件…一直持续到行数结束。
for line in csvfile:
reader = csv.DictReader( line, fieldnames)
有任何纠正建议吗?
编辑:澄清一下,目前我有:(第1行的每条记录)
[{"FirstName":"John","LastName":"Doe","IDNumber":"123","Message":"None"},{"FirstName":"George","LastName":"Washington","IDNumber":"001","Message":"Something"}]
我要寻找的是:(2条记录中的2条记录)
{"FirstName":"John","LastName":"Doe","IDNumber":"123","Message":"None"} {"FirstName":"George","LastName":"Washington","IDNumber":"001","Message":"Something"}
不是每个单独的字段缩进/在单独的行上缩进,而是每个记录在其自己的行上。
一些样本输入。
"John","Doe","001","Message1" "George","Washington","002","Message2"
您所需输出的问题是它不是有效的json文档;这 是json文档流 !
没关系,如果您需要的话,但这意味着对于输出中想要的每个文档,您都必须调用json.dumps。
json.dumps
由于要分隔文档的换行符不包含在这些文档中,因此您需要自己提供它。因此,我们只需要从对json.dump的调用中拉出循环,并为每个编写的文档插入换行符即可。
import csv import json csvfile = open('file.csv', 'r') jsonfile = open('file.json', 'w') fieldnames = ("FirstName","LastName","IDNumber","Message") reader = csv.DictReader( csvfile, fieldnames) for row in reader: json.dump(row, jsonfile) jsonfile.write('\n')