Módulo Python CSV

O módulo csv fornece ferramentas para ler e escrever em arquivos CSV, que são comumente usados para troca de dados.

Módulo csv vs Leitura-Escrita Manual de Arquivos

Embora você possa ler e escrever arquivos CSV usando operações básicas de arquivo e métodos de string (como open() com read ou write e split()), o módulo csv foi projetado para lidar com casos extremos, como campos entre aspas, delimitadores incorporados e diferentes quebras de linha. Ele garante compatibilidade com arquivos CSV gerados por outros programas (como Excel) e reduz o risco de erros de análise. Para a maioria das tarefas CSV, prefira o módulo csv em vez da análise manual.
Para mais informações sobre os fundamentos do manuseio de arquivos, consulte a página File and directory Paths.

Para começar, importe o módulo:

import csv

csv.reader()

Esta função recebe um arquivo que deve ser um iterável de strings. Em outras palavras, deve ser o arquivo aberto, pois segue este formato:

import csv

file_path = 'file.csv'

# Ler arquivo CSV
with open(file_path, 'r', newline='') as csvfile:
  reader = csv.reader(csvfile)

  # Iterar sobre cada linha
  for line in reader:
    print(line)

Esta função retorna um objeto leitor que pode ser facilmente iterado para obter cada linha. Cada coluna nas linhas correspondentes pode ser acessada pelo índice, sem a necessidade de usar a função embutida split().

csv.writer()

Esta função recebe o arquivo a ser escrito como um arquivo csv. Semelhante à função leitor, ela deve ser invocada desta forma:

import csv

file_path = 'file.csv'

# Abrir arquivo para escrita CSV
with open(file_path, 'w', newline='') as csvfile:
  writer = csv.writer(csvfile)

  # fazer algo

O bloco “fazer algo” pode ser substituído pelo uso das seguintes funções:

writer.writerow()

Escreve uma única linha no arquivo CSV.

# Escrever linha de cabeçalho
writer.writerow(['name', 'age', 'city'])
# Escrever linha de dados
writer.writerow(['Alice', 30, 'London'])

writer.writerows()

Escreve múltiplas linhas de uma vez.

# Preparar múltiplas linhas
rows = [
    ['name', 'age', 'city'],
    ['Bob', 25, 'Paris'],
    ['Carol', 28, 'Berlin']
]
# Escrever todas as linhas de uma vez
writer.writerows(rows)

csv.DictReader

Permite ler arquivos CSV e acessar cada linha como um dicionário, usando a primeira linha do arquivo como chaves (cabeçalhos de coluna) por padrão.

import csv

# Ler CSV como dicionário (primeira linha se torna chaves)
with open('people.csv', 'r', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    # Acessar colunas pelo nome em vez de índice
    for row in reader:
        print(row['name'], row['age'])
  • Cada row é um OrderedDict (ou um dict regular no Python 3.8+).

  • Se o seu CSV não tiver cabeçalhos, você pode fornecê-los com o parâmetro fieldnames:

    reader = csv.DictReader(csvfile, fieldnames=['name', 'age', 'city'])
    

csv.DictWriter

Permite escrever dicionários como linhas em um arquivo CSV. Você deve especificar os fieldnames (cabeçalhos de coluna) ao criar o escritor.

import csv

fieldnames = ['name', 'age', 'city']
rows = [
    {'name': 'Alice', 'age': 30, 'city': 'London'},
    {'name': 'Bob', 'age': 25, 'city': 'Paris'}
]

# Escrever dicionários em CSV
with open('people_dict.csv', 'w', newline='') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()  # escreve a linha de cabeçalho
    writer.writerows(rows)
  • Use writer.writeheader() para escrever os cabeçalhos das colunas como a primeira linha.
  • Cada dicionário em writer.writerows() deve ter chaves que correspondam aos fieldnames especificados ao criar o escritor.

Parâmetros adicionais para csv.reader() e csv.writer()

delimiter

Deve ser o caractere usado para separar os campos. Como o tipo de arquivo indica, o padrão é a vírgula ‘,’. Dependendo da localidade, o Excel pode gerar arquivos csv com o ponto e vírgula como delimitador.

import csv

# Ler CSV com delimitador ponto e vírgula
with open('data_semicolon.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=';')
    for row in reader:
        print(row)

lineterminator

Caractere ou sequência de caracteres para terminar uma linha. O mais comum é “\r\n”, mas pode ser “\n”.

quotechar

Caractere usado para colocar entre aspas campos que contêm caracteres especiais (o padrão é ").

# Usar aspas simples como caractere de citação
reader = csv.reader(csvfile, quotechar="'")

Para mais detalhes, consulte a documentação oficial do módulo csv do Python.