csv to json with python, json in rows

2019-02-27 07:42发布

I would like to covert a CSV to a set of JSON objects with Python, formatted in rows.

I tried this script below, put together from a couple SO answers, but this formats this way:

{
   key:'value'
},
{
   key:'value'
} // etc

I would like to format this as:

{ key, 'value'},
{ key, 'value'}, // etc

I tried a few ways suggested here to insert a newline, but none worked so far.

script below:

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=(' ,')  ))

my csv is straightforward:

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

etc..

EDIT: I received this suggestion in the comments of another post:

for x in json_list: print json.dumps(x)

this will print the format I am looking for, but I have not yet figured out how to write this to a json file.

2条回答
三岁会撩人
2楼-- · 2019-02-27 07:52

First, the CSV file is not formatted properly, I had to reformat file.csv to look like:

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

in order to make it work - I'm not sure if that's the uneven number of spaces between the tokens or other reason.

Second, I modified the code:

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")

and the result (file) looks like:

{'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'}
查看更多
够拽才男人
3楼-- · 2019-02-27 08:05
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) gives the wrong kind of quotes, don't use it. You won't be able to read the file with json.

查看更多
登录 后发表回答