Python CSV: lendo e escrevendo planilhas

Aprenda como lidar com dados CSV em Python. Domine csv.reader, csv.writer e DictReader/DictWriter para análise eficiente de tabelas.

Experimente no Editor

Visão geral

CSV (valores separados por vírgula) é um formato onipresente para exportar e importar dados de planilhas e bancos de dados relacionais. Como os arquivos CSV são arquivos de texto simples, eles são universalmente suportados por ferramentas analíticas, plataformas de banco de dados e linguagens de programação. Python apresenta um módulo `csv` integrado especificamente otimizado para analisar, escrever e manipular dados tabulares sem a necessidade de bibliotecas de terceiros como o pandas.

O módulo csv fornece duas interfaces principais: leitores/gravadores baseados em lista e leitores/gravadores baseados em dicionário. `csv.reader()` e `csv.writer()` representam cada linha no CSV como uma lista de strings, o que é simples, mas requer referência a colunas por seu índice numérico. Para uma abordagem mais robusta, os desenvolvedores usam `csv.DictReader()` e `csv.DictWriter()`. Essas classes mapeiam cada linha para um dicionário usando a linha do cabeçalho CSV como chaves, produzindo código altamente legível que não quebra se as colunas forem reordenadas.

Ao lidar com arquivos CSV, os detalhes da sintaxe são importantes. Programas diferentes usam delimitadores diferentes (como tabulações ou ponto e vírgula) e lidam com aspas ou finais de linha de maneiras distintas. O módulo `csv` permite definir delimitadores personalizados, regras de cotação e caracteres de escape por meio de um parâmetro 'dialeto'. Além disso, ao abrir arquivos CSV em Python, é um requisito crítico passar `newline=''` para a função `open()` para evitar problemas de linha em branco em diferentes sistemas operacionais.

Saída de código e execução

Gravar dados em um arquivo CSV usando DictWriter e lê-los novamente com DictReader.

import csv

filename = "employees.csv"
fieldnames = ["id", "name", "department"]
data = [
    {"id": "101", "name": "Bob", "department": "HR"},
    {"id": "102", "name": "Alice", "department": "Engineering"}
]

# Write dict data to CSV
with open(filename, "w", newline="") as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(data)

print("CSV written successfully.\n--- Reading CSV ---")

# Read CSV data back as dictionaries
with open(filename, "r", newline="") as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(f"Employee {row['name']} works in {row['department']}.")
Saída terminal
CSV written successfully.
--- Reading CSV ---
Employee Bob works in HR.
Employee Alice works in Engineering.

Implementação passo a passo

  • Exportando registros de planilhas para análise financeira
  • Importando catálogos de listas de contatos para bancos de dados
  • Formatando saídas estatísticas de scripts computacionais

Perguntas frequentes

Por que preciso especificar newline="" ao abrir um arquivo CSV?

Isso é exigido pelo gravador interno do módulo csv para evitar a inserção de linhas em branco extras, principalmente em plataformas Windows.

Como posso analisar um arquivo CSV que usa tabulações em vez de vírgulas?

Você pode passar o parâmetro delimitador para o leitor ou gravador, por exemplo, csv.reader(file, delimiter='\t').

Tópicos Relacionados

Recursos Python recomendados

Expanda seu conhecimento com tutoriais interativos relacionados, folhas de dicas e comparações de código.