我想用Python将CSV转换为一组JSON对象,以行格式。
我在下面尝试了这个脚本,从几个 SO 答案中组合在一起,但这种格式是这样的:
{
key:'value'
},
{
key:'value'
} // etc
我想将其格式化为:
{ key, 'value'},
{ key, 'value'}, // etc
我尝试了这里建议的几种插入换行符的方法,但到目前为止都没有奏效。
脚本如下:
import sys, getopt
import csv
import json
CSV_PATH = 'path/file.csv'
JSON_PATH = 'path/demo.json'
csv_file = csv.DictReader(open(CSV_PATH, 'r'))
json_list = []
for row in csv_file:
json_list.append(row )
file(JSON_PATH, 'w').write(json.dumps(json_list, indent=4, separators=(' ,') ))
我的CSV很简单:
SUM_F SUM_I SUM_P SUM_PI SUM_Bt SUM_BI SUM_M SUM_MI Year Month
15 3963 14 993 0 91 1 2879 2009 1
等。。
编辑:我在另一篇文章的评论中收到了这个建议:
for x in json_list: print json.dumps(x)
这将打印我正在寻找的格式,但我还没有弄清楚如何将其写入 json 文件。
import csv
import json
CSV_PATH = 'file.csv'
JSON_PATH = 'demo.json'
with open(CSV_PATH, 'r') as csv_file:
reader = csv.DictReader(csv_file)
with open(JSON_PATH, 'w') as json_file:
for row in reader:
json_file.write(json.dumps(row) + 'n')
str(row)
给出了错误的引号,请不要使用它。您将无法使用 json
读取文件。
首先,CSV文件的格式不正确,我不得不重新格式化文件.csv看起来像:
SUM_F,SUM_I,SUM_P,SUM_PI,SUM_Bt,SUM_BI,SUM_M,SUM_MI,Year,Month
15,3963,14,993,0,91,1,2879,2009,1
3,4,5,6,0,971,1,8,9,10
为了使它工作 - 我不确定这是令牌之间的空格数量不均匀还是其他原因。
其次,我修改了代码:
import sys, getopt
import csv
import json
CSV_PATH = '/path/file.csv'
JSON_PATH = '/path/demo.json'
csv_file = csv.DictReader(open(CSV_PATH, 'r'))
f = file(JSON_PATH, 'w')
for row in csv_file:
f.write(str(row)+"n")
结果(文件(如下所示:
{'SUM_I': '3963', 'SUM_M': '1', 'SUM_BI': '91', 'Month': '1', 'SUM_MI': '2879', 'SUM_F': '15', 'Year': '2009', 'SUM_Bt': '0', 'SUM_P': '14', 'SUM_PI': '993'}
{'SUM_I': '4', 'SUM_M': '1', 'SUM_BI': '971', 'Month': '10', 'SUM_MI': '8', 'SUM_F': '3', 'Year': '9', 'SUM_Bt': '0', 'SUM_P': '5', 'SUM_PI': '6'}