У 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
модулі. Я вважаю, що толерантніше до питань кодування, і панди автоматично перетворюють номери рядків у 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')
- Панди також значно полегшують порядок стовпців у вашому файлі csv. За замовчуванням вони в алфавітному порядку, але ви можете вказати порядок стовпців. За допомогою
csv
модуля ванілі вам потрібно подати його OrderedDict
або вони з’являться у випадковому порядку (якщо вони працюють в python <3.5). Дивіться: Збереження порядку стовпців у Python Pandas DataFrame для отримання додаткової інформації.