2013-06-11 2 views
4

У меня есть test.csv файл:Заменить имена полей при использовании DictReader

foo,bar,foobar,barfoo 

1,2,3,4 
5,6,7,8 
9,10,11,12 

И следующий CSV анализатор:

#!/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 

есть простой способ заменить имена полей в выходном сигнале, без изменения заголовок файла CSV?

Мой выходной ток это:

[ 
    { 
     "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" 
    } 
] 

Могу ли я получить что-то вроде этого:

[ 
    { 
     "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" 
    } 
] 

ответ

7

Самый простой способ это просто установить:

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

Вы можете сохранить старые поля, если хотите.

+1

Ох. Таким образом, 'fieldnames' не должны соответствовать фактическим« именам полей »строки заголовка в« CSV »? – cherrun

+1

@cherrun Нет, они этого не делают. На боковой ноте вам даже не нужно указывать их так, как вы. 'csv.DictReader (f)' будет читать первую строку как заголовок по умолчанию, без необходимости использовать 'fieldnames = ...', но, возможно, это лучше, как у вас есть – jamylak

2

Просто замените эту строку:

reader = csv.DictReader(f, fieldnames = ("foo","bar","foobar","barfoo")) 

с этим:

reader = csv.DictReader(f, fieldnames=("id", "email", "name", "phone")) 
+0

Обратите внимание, что аргумент fieldnames предоставляет заголовок для ваших данных , Если аргумент опущен, он будет взят из первой строки вашего файла csv. –

Смежные вопросы