Как преобразовать этот список словарей в csv-файл?
у меня есть список словарей, который выглядит примерно так:
toCSV = [{'name':'bob','age':25,'weight':200},{'name':'jim','age':31,'weight':180}]
что я должен сделать, чтобы преобразовать это в CSV-файл, который выглядит примерно так:
name,age,weight
bob,25,200
jim,31,180
6 ответов:
import csv toCSV = [{'name':'bob','age':25,'weight':200}, {'name':'jim','age':31,'weight':180}] keys = toCSV[0].keys() with open('people.csv', 'wb') as output_file: dict_writer = csv.DictWriter(output_file, keys) dict_writer.writeheader() dict_writer.writerows(toCSV)
EDIT: мое предыдущее решение не обрабатывает заказ. Как отметил Уайлдак, диктатор здесь более уместен.
в модуле csv Python есть DictWriter что, вероятно, будет полезно.
это когда у вас есть один список словарей:
import csv with open('names.csv', 'w') as csvfile: fieldnames = ['first_name', 'last_name'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
потому что @User и @BiXiC попросили помочь с UTF-8 здесь вариант решения @Matthew. (Мне нельзя комментировать, поэтому я отвечаю.)
import unicodecsv as csv toCSV = [{'name':'bob','age':25,'weight':200}, {'name':'jim','age':31,'weight':180}] keys = toCSV[0].keys() with open('people.csv', 'wb') as output_file: dict_writer = csv.DictWriter(output_file, keys) dict_writer.writeheader() dict_writer.writerows(toCSV)
вот еще одно, более общее решение, предполагающее, что у вас нет списка строк (возможно, они не вписываются в память) или копии заголовков (возможно,
write_csv
функция является родовой):def gen_rows(): yield OrderedDict(name='bob', age=25, weight=200) yield OrderedDict(name='jim', age=31, weight=180) def write_csv(): it = genrows() first_row = it.next() # __next__ in py3 with open("people.csv", "w") as outfile: wr = csv.DictWriter(outfile, fieldnames=list(first_row)) wr.writeheader() wr.writerow(first_row) wr.writerows(it)
Примечание: используемый здесь Конструктор OrderedDict сохраняет порядок только в python >3.4. Если порядок важен, используйте