Escrever Dicionário no CSV em Python

Este tutorial irá introduzir como escrever uma variável de dicionário num ficheiro csv em Python.

Utilize o módulo csv para escrever um dicionário num ficheiro CSV em Python

O módulo Python csv contém ferramentas e funções para manipular ficheiros csv. Há dois métodos fáceis de utilizar para escrever dicionários num ficheiro csv: writer() e DictWriter().

Estes dois métodos têm funções semelhantes; a única diferença é que DictWriter() é uma classe de invólucro que contém mais funções.

Vamos dar um exemplo inicial com um único dicionário com alguns pares de valores-chave:

dct = {'Name': 'John', 'Age': '23', 'Country': 'USA'}

No primeiro exemplo, utilizamos writer() para aceder a um novo ficheiro csv e inserir o dicionário no mesmo.

import csv

dct = {'Name': 'John', 'Age': '23', 'Country': 'USA'}

with open('dct.csv', 'w') as f:  
    writer = csv.writer(f)
    for k, v in dct.items():
       writer.writerow([k, v])

Como o tipo de acesso ao ficheiro é w, o conteúdo do ficheiro csv dct.csv será anulado pelas novas alterações. Se o ficheiro não existir, então será automaticamente criado no mesmo directório.

O conteúdo do ficheiro csv sairá:

Ficheiro CSV

Uma vez que existe apenas uma entrada de dicionário, a disposição do ficheiro csv contém todas as chaves na primeira coluna, e os valores estão na segunda coluna.

Exemplo de Utilização de uma Matriz de Dicionários

Este foi um exemplo de um único dicionário. E se quiser inserir vários dicionários num único ficheiro csv?

Para este exemplo, a função DictWriter() será utilizada para escrever num ficheiro csv. O layout do primeiro exemplo do CSV teria também de ser alterado, uma vez que existem múltiplos valores com as mesmas chaves.

A primeira linha deveria conter as etiquetas das chaves, e as linhas subsequentes conteriam os valores para cada entrada de dicionário.

Primeiro, declarar um array de dicionários com os mesmos valores chave.

dct_arr = [
  {'Name': 'John', 'Age': '23', 'Country': 'USA'},
  {'Name': 'Jose', 'Age': '44', 'Country': 'Spain'},
  {'Name': 'Anne', 'Age': '29', 'Country': 'UK'},
  {'Name': 'Lee', 'Age': '35', 'Country': 'Japan'}
]

Agora escreva este conjunto de dicionários num ficheiro csv utilizando o módulo csv e o módulo DictWriter().

import csv

labels = ['Name', 'Age', 'Country']
dct_arr = [
  {'Name': 'John', 'Age': '23', 'Country': 'USA'},
  {'Name': 'Jose', 'Age': '44', 'Country': 'Spain'},
  {'Name': 'Anne', 'Age': '29', 'Country': 'UK'},
  {'Name': 'Lee', 'Age': '35', 'Country': 'Japan'}
]

try:
    with open('csv_dct.csv', 'w') as f:
        writer = csv.DictWriter(f, fieldnames=labels)
        writer.writeheader()
        for elem in dct_arr:
            writer.writerow(elem)
except IOError:
    print("I/O error")

O parâmetro fieldnames em DictWriter() é atribuído à variável labels, que é um array de etiquetas-chave do array de dicionários.

Também é bom praticar o código de embrulho que manipula ficheiros com excepção do manuseamento (try ... except). Isto no caso de haver erros ou incompatibilidades externas relativamente ao processo de escrita de ficheiros.

Resultado:

CSV File Array

Em resumo, o módulo csv contém todas as funções e ferramentas necessárias para escrever um dicionário num ficheiro csv. Utilizando as funções writer() e DictWriter(), ambas podem ser facilmente utilizadas para o conseguir.

Também é bom notar que se embrulham blocos que manipulam ficheiros com excepção do manuseamento para assegurar que os erros IO são apanhados antes de quebrar alguma coisa.

Artigo relacionado - Python CSV

  • Converter arquivo CSV em arquivo JSON em Python
  • Como ler CSV para listar em Python
  • Artigo relacionado - Python Dictionary

  • Converter arquivo CSV em arquivo JSON em Python
  • Como ordenar o dicionário por chave em Python