I have a test.csv
file:
foo,bar,foobar,barfoo
1,2,3,4
5,6,7,8
9,10,11,12
And the following CSV
parser:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import csv
import json
f = open ( 'test.csv', 'r' )
reader = csv.DictReader( f, fieldnames = ( "foo","bar","foobar","barfoo" ))
out = json.dumps( [ row for row in reader ], ensure_ascii=False, encoding="utf-8")
print out
Is there an easy way to replace the fieldnames in the output, without changing the header of the CSV
file?
My current output is this:
[
{
"foobar":"foobar",
"foo":"foo",
"bar":"bar",
"barfoo":"barfoo"
},
{
"foobar":"3",
"foo":"1",
"bar":"2",
"barfoo":"4"
},
{
"foobar":"7",
"foo":"5",
"bar":"6",
"barfoo":"8"
},
{
"foobar":"11",
"foo":"9",
"bar":"10",
"barfoo":"12"
}
]
Could I get something like this:
[
{
"id":"foobar",
"email":"foo",
"name":"bar",
"phone":"barfoo"
},
{
"id":"3",
"email":"1",
"name":"2",
"phone":"4"
},
{
"id":"7",
"email":"5",
"name":"6",
"phone":"8"
},
{
"id":"11",
"email":"9",
"name":"10",
"phone":"12"
}
]
Reader() allows you to access CSV data using indexes and is ideal for simple CSV files. csv. DictReader() on the other hand is friendlier and easy to use, especially when working with large CSV files.
DictReader() returned an OrderedDict type for each row. That's why we used dict() to convert each row to a dictionary. Notice that we have explicitly used the dict() method to create dictionaries inside the for loop.
DictReader s are now OrderedDict s, not regular ones as they were previously (so doing something like this is no longer necessary).
Python CSV DictReaderDictReader class operates like a regular reader but maps the information read into a dictionary. The keys for the dictionary can be passed in with the fieldnames parameter or inferred from the first row of the CSV file.
The easiest way is to just set:
reader.fieldnames = "email", "name", "id", "phone"
You can save the old fieldnames if you want too.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With