Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Replace fieldnames when using DictReader

Tags:

python

json

csv

etl

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"
   }
]
like image 552
cherrun Avatar asked Jun 11 '13 08:06

cherrun


People also ask

What is the difference between reader () and DictReader () function?

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.

What is the use of DictReader () function?

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.

Is DictReader ordered?

DictReader s are now OrderedDict s, not regular ones as they were previously (so doing something like this is no longer necessary).

How does DictReader work in Python?

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.


1 Answers

The easiest way is to just set:

reader.fieldnames = "email", "name", "id",  "phone"

You can save the old fieldnames if you want too.

like image 192
jamylak Avatar answered Nov 15 '22 22:11

jamylak