В Python 3 все немного по-другому, но намного проще и менее подвержено ошибкам. Желательно сообщить CSV, что ваш файл должен быть открыт с кодировкой utf8
, поскольку это делает эти данные более переносимыми для других (при условии, что вы не используете более строгую кодировку, такую как latin1
)
import csv
toCSV = [{'name':'bob','age':25,'weight':200},
{'name':'jim','age':31,'weight':180}]
with open('people.csv', 'w', encoding='utf8', newline='') as output_file:
fc = csv.DictWriter(output_file,
fieldnames=toCSV[0].keys(),
)
fc.writeheader()
fc.writerows(toCSV)
- Обратите внимание, что
csv
в python 3 требует параметра newline=''
, в противном случае вы получите пустые строки в CSV при открытии в excel / opencalc.
В качестве альтернативы: я предпочитаю использовать обработчик csv в модуле pandas
. Я считаю, что он более терпим к проблемам кодирования, и pandas автоматически преобразует номера строк в CSV в правильный тип (int, float и т. Д.) При загрузке файла.
import pandas
dataframe = pandas.read_csv(filepath)
list_of_dictionaries = dataframe.to_dict('records')
dataframe.to_csv(filepath)
Примечание:
- pandas позаботится об открытии файла для вас, если вы дадите ему путь, и по умолчанию установит
utf8
в python3, а также определит заголовки.
- фрейм данных отличается от структуры, которую дает CSV, поэтому при загрузке вы добавляете одну строку, чтобы получить то же самое:
dataframe.to_dict('records')
- pandas также значительно облегчает управление порядком столбцов в вашем CSV-файле. По умолчанию они в алфавитном порядке, но вы можете указать порядок столбцов. С ванильным
csv
модулем вам нужно указать OrderedDict
, иначе они появятся в случайном порядке (если работа в python <3.5). См .: <a href="https://stackoverflow.com/questions/15653688/preserving-column-order-in-python-pandas-dataframe"> Сохранение порядка столбцов в Python DataFrame Pandas для получения дополнительной информации.