No python 3, as coisas são um pouco diferentes, mas muito mais simples e menos propensas a erros. É uma boa idéia informar ao CSV que seu arquivo deve ser aberto com utf8
codificação, pois torna esses dados mais portáteis para outras pessoas (supondo que você não esteja usando uma codificação mais restritiva, como 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)
- Observe que
csv
no python 3 precisa do newline=''
parâmetro, caso contrário, você obtém linhas em branco no seu CSV ao abrir no excel / opencalc.
Como alternativa: prefiro usar o manipulador csv no pandas
módulo. Acho que é mais tolerante a problemas de codificação, e os pandas convertem automaticamente os números de string em CSVs no tipo correto (int, float, etc.) ao carregar o arquivo.
import pandas
dataframe = pandas.read_csv(filepath)
list_of_dictionaries = dataframe.to_dict('records')
dataframe.to_csv(filepath)
Nota:
- Os pandas cuidarão de abrir o arquivo para você, se você der um caminho, e usará como padrão
utf8
python3, além de descobrir os cabeçalhos.
- um dataframe não é a mesma estrutura que o CSV fornece, então você adiciona uma linha ao carregar para obter a mesma coisa:
dataframe.to_dict('records')
- O pandas também facilita muito o controle da ordem das colunas no seu arquivo csv. Por padrão, eles são alfabéticos, mas você pode especificar a ordem das colunas. Com o
csv
módulo vanilla , você precisa alimentá-lo OrderedDict
ou eles aparecerão em uma ordem aleatória (se estiver trabalhando em python <3.5). Consulte: Preservando a ordem das colunas no Python Pandas DataFrame para obter mais informações.