Escrever Dicionário no CSV em Python

Rayven Esplanada 20 novembro 2021
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 um array 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.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Artigo relacionado - Python CSV

Artigo relacionado - Python Dictionary