В 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). См .: Сохранение порядка столбцов в Python DataFrame Pandas для получения дополнительной информации.