2013-10-14 2 views
5

После чтения файла CSV с помощьюнаписать список упорядоченных словарей в файл CSV в Python

with open(filename, 'r') as f: 
    reader = csv.DictReader(f) 
    for line in reader: 
    date = line['Date'] 

каждой строки является OrderedDict

OrderedDict([ 
    ('Date', '2008-03-20'), 
    ('Name', 'Some name'),...) 
]) 

Я хотел бы написать этот список заказанных словарей в файл csv в python, используя ключи первого словаря в списке в качестве заголовка столбца.

+0

http://docs.python.org/2/library/csv.html –

+0

@ClemensTolboom, хотя редактирование стоит того, я не уверен, стоит ли натыкаться на 4-летний закрытый вопрос. –

+1

@AdamSmith хорошо ответ был полезен, поэтому я отмахнулся от вопроса :) Так спасибо! –

ответ

9

Используйте csv.DictWriter объект, чтобы сделать всю тяжелую работу за вас:

import csv 
with open('spreadsheet.csv', 'w') as outfile: 
    fp = csv.DictWriter(outfile, list_of_dicts[0].keys()) 
    fp.writeheader() 
    fp.writerows(list_of_dicts) 

Он создает новый CSV, пишет строку заголовка к нему, так что вы знаете, что представляет собой каждый столбец, затем выписывает каждый dict как строка со всеми столбцами в том же порядке, что и столбец заголовка.

1
import csv 
header = [key for key in list[0].iterkeys()] 
out_file = csv.writer(open("out.csv", "w")) 
out_file.write(header) 
for line in list: 
    out_file.writerow(line.itervalues()) 
+0

Это опасно, потому что предполагается, что 'line.itervalues ​​()' всегда будет возвращаться в том же порядке, что и 'list [0] .iterkeys()'. Безопаснее предположить, что элементы dict всегда будут возвращаться в случайном порядке и защищать код для этого случая. –

+1

, если вы используете OrderedDict, поскольку первоначальный автор планировал iterkeys и itervalues ​​вернет dicts в том же порядке – yemu

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