Como ler e analisar um arquivo CSV em Python

Aprenda como ler e analisar arquivos CSV em Python usando o módulo csv integrado. Domine a leitura como listas, leitores de dicionário e delimitadores personalizados.

Experimente esta solução no Editor

Visão geral

CSV (valores separados por vírgula) é um formato de arquivo onipresente para armazenar conjuntos de dados tabulares. Seja importando bancos de dados, exportando planilhas ou baixando logs, a leitura de CSV é uma habilidade essencial. Python inclui um módulo `csv` integrado, dedicado e altamente otimizado para analisar arquivos CSV facilmente, sem a necessidade de bibliotecas de terceiros, como pandas.

A função `csv.reader` lê um arquivo linha por linha e o analisa, dividindo cada linha pelo delimitador de vírgula e retornando listas de strings. Se o seu arquivo CSV tiver uma linha de cabeçalho (por exemplo, rótulos de coluna), geralmente é preferível usar `csv.DictReader`. Ele analisa automaticamente cada linha em um dicionário onde as chaves são os rótulos das colunas, tornando o código muito mais legível e robusto a alterações na ordem das colunas.

Ao abrir arquivos CSV, é uma prática recomendada definir `newline=""` na instrução `open()`. Isso evita que o Python faça traduções automatizadas de novas linhas, o que pode levar a erros de análise em determinados sistemas operacionais. Além disso, sempre especifique `encoding="utf-8"` para lidar com caracteres especiais.

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

Este script demonstra a gravação de um arquivo CSV de amostra e a leitura dele usando csv.reader e csv.DictReader.

import csv

# Writing a sample CSV file
sample_content = [
    ["name", "role", "salary"],
    ["Alice", "Developer", "90000"],
    ["Bob", "Manager", "110000"]
]
with open("employees.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerows(sample_content)

# 1. Reading CSV using csv.reader (List representation)
print("--- Using csv.reader ---")
with open("employees.csv", "r", newline="", encoding="utf-8") as file:
    reader = csv.reader(file)
    header = next(reader) # Skip header row
    print("Header:", header)
    for row in reader:
         print(f"Employee: {row[0]} | Role: {row[1]}")

# 2. Reading CSV using csv.DictReader (Dictionary representation)
print("\n--- Using csv.DictReader ---")
with open("employees.csv", "r", newline="", encoding="utf-8") as file:
    dict_reader = csv.DictReader(file)
    for row in dict_reader:
         print(f"Name: {row['name']} | Role: {row['role']} | Salary: {row['salary']}")
Saída terminal
--- Using csv.reader ---
Header: ['name', 'role', 'salary']
Employee: Alice | Role: Developer
Employee: Bob | Role: Manager

--- Using csv.DictReader ---
Name: Alice | Role: Developer | Salary: 90000
Name: Bob | Role: Manager | Salary: 110000

Implementação passo a passo

  • Importe o módulo csv integrado em seu script.
  • Abra o arquivo CSV usando open("employees.csv", "r", newline="", encoding="utf-8") como arquivo.
  • Passe o objeto file para csv.reader(file) para analisar as linhas do arquivo como listas de strings.
  • Use csv.DictReader(file) para analisar linhas como mapeamentos de dicionário correspondentes aos cabeçalhos das colunas.

Perguntas frequentes

Por que devo definir newline="" ao abrir um arquivo CSV?

Definir newline="" evita que o Python modifique caracteres de fim de linha dinamicamente, garantindo que o módulo csv possa analisar novas linhas no estilo csv corretamente em diferentes sistemas operacionais.

Como analiso um arquivo CSV que usa tabulações ou ponto e vírgula em vez de vírgulas?

Você pode passar um delimitador personalizado para a função de leitor: csv.reader(file, delimiter="\t") ou csv.reader(file, delimiter=";").

Tópicos Relacionados

Recursos Python recomendados

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