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.
First, the CSV file is not formatted properly, I had to reformat file.csv to look like:
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:
and the result (file) looks like:
str(row)
gives the wrong kind of quotes, don't use it. You won't be able to read the file withjson
.