У меня есть список словарей, который выглядит примерно так:
toCSV = [{'name':'bob','age':25,'weight':200},{'name':'jim','age':31,'weight':180}]
Что я должен сделать, чтобы преобразовать это в CSV-файл, который выглядит примерно так:
name,age,weight
bob,25,200
jim,31,180
python
csv
dictionary
data-conversion
Backus
источник
источник
Ответы:
РЕДАКТИРОВАТЬ: мое предыдущее решение не обрабатывает заказ. Как отмечает Уилдак, DictWriter здесь более уместен.
источник
with open('people.csv', 'wb') as f: ...
dict_writer.writeheader()
вместоdict_writer.writer.writerow(keys)
open('people.csv', 'w')
set().union(*(d.keys() for d in mylist))
чтобы получить все ключи в списке (если у вас есть ключи, у которых не все ключи)это когда у вас есть один список словаря:
источник
В Python 3 все немного по-другому, но намного проще и менее подвержено ошибкам. Хорошая идея сказать CSV, что ваш файл должен быть открыт с
utf8
кодировкой, так как это делает эти данные более переносимыми для других (при условии, что вы не используете более ограничительную кодировку, напримерlatin1
)csv
в python 3 нуженnewline=''
параметр, в противном случае вы получите пустые строки в CSV при открытии в excel / opencalc.В качестве альтернативы: я предпочитаю использовать обработчик csv в
pandas
модуле. Я считаю, что он более терпим к проблемам кодирования, и pandas автоматически преобразует номера строк в CSV-файлах в правильный тип (int, float и т. Д.) При загрузке файла.Примечание:
utf8
python3, а также определит заголовки.dataframe.to_dict('records')
csv
модулем вам нужно кормить егоOrderedDict
или они появятся в случайном порядке (если работает в python <3.5). См .: Сохранение порядка столбцов в Python DataFrame Pandas для получения дополнительной информации.источник
Поскольку @User и @BiXiC попросили помочь с UTF-8, здесь вариант решения @Matthew. (Мне запрещено комментировать, поэтому я отвечаю.)
источник
Это был бы самый простой способ записать данные в файл .csv
источник
Вот другое, более общее решение, предполагающее, что у вас нет списка строк (возможно, они не помещаются в памяти) или копии заголовков (возможно,
write_csv
функция является общей):Примечание : используемый здесь конструктор OrderedDict сохраняет порядок только в python> 3.4. Если порядок важен, используйте
OrderedDict([('name', 'bob'),('age',25)])
форму.источник
источник