Como trabalhar com arquivos CSV no Python

Tempo de leitura: 12 minutos
Logo CSV e logo do Python com um símbolo de '+'

Trabalhar com arquivos CSV no Python é uma das habilidades mais importantes para quem atua com análise de dados. CSV significa “Comma-Separated Values” (Valores Separados por Vírgula) e é um formato extremamente popular para armazenar e trocar dados tabulares. Se você está começando sua jornada em Python, dominar a manipulação de arquivos CSV abrirá muitas portas no mercado de trabalho.

Neste guia completo, você aprenderá desde os conceitos básicos até técnicas avançadas para ler, escrever e manipular arquivos CSV. Vamos explorar tanto a biblioteca padrão do Python quanto ferramentas poderosas como Pandas, que facilitam muito o trabalho com grandes volumes de dados.

Para complementar seu aprendizado, assista a este vídeo do canal Hashtag Programação que explica de forma prática como trabalhar com CSV:

YouTube player

O que são arquivos CSV e por que são importantes

Arquivos CSV são documentos de texto simples que organizam dados em linhas e colunas. Cada linha representa um registro e as colunas são separadas por vírgulas (ou outros delimitadores como ponto e vírgula). Esse formato é universal e pode ser aberto em praticamente qualquer programa, desde editores de texto até planilhas como Excel.

A popularidade dos arquivos CSV vem de sua simplicidade e portabilidade. Diferente de formatos proprietários, CSV não depende de software específico. Isso torna perfeito para compartilhar dados entre diferentes sistemas e linguagens de programação. Empresas usam CSV para exportar relatórios, bancos de dados utilizam para backup, e cientistas de dados preferem pela facilidade de manipulação.

Um exemplo típico de arquivo CSV contendo informações de produtos ficaria assim:

nome,preco,quantidade
Notebook,2500.00,10
Mouse,45.90,150
Teclado,120.00,80

Repare que a primeira linha geralmente contém os cabeçalhos, indicando o nome de cada coluna. As linhas seguintes trazem os dados propriamente ditos. Essa estrutura simples facilita tanto a leitura humana quanto o processamento por máquinas.

Lendo arquivos CSV com a biblioteca padrão do Python

Python possui uma biblioteca nativa chamada csv que permite trabalhar com esses arquivos sem instalar nada adicional. Vamos começar com um exemplo básico de leitura:

Python
import csv

with open('produtos.csv', 'r', encoding='utf-8') as arquivo:
    leitor = csv.reader(arquivo)
    for linha in leitor:
        print(linha)

Neste código, usamos a função open() para abrir o arquivo no modo leitura (‘r’). O parâmetro encoding=’utf-8′ garante que caracteres especiais em português sejam lidos corretamente. A função csv.reader() cria um objeto que itera sobre cada linha do arquivo.

Cada linha retornada é uma lista contendo os valores separados por vírgula. O uso de with é uma boa prática porque fecha o arquivo automaticamente após o uso, evitando problemas de memória.

Se preferir trabalhar com dicionários em vez de listas, o método DictReader é mais conveniente:

Python
import csv

with open('produtos.csv', 'r', encoding='utf-8') as arquivo:
    leitor = csv.DictReader(arquivo)
    for linha in leitor:
        print(f"Produto: {linha['nome']}, Preço: R$ {linha['preco']}")

Com DictReader, cada linha se torna um dicionário onde as chaves são os cabeçalhos do CSV. Isso torna o código mais legível e menos propenso a erros, pois você acessa os dados por nome em vez de índice numérico.

Escrevendo dados em arquivos CSV

Criar e escrever em arquivos CSV é tão simples quanto ler. Veja como salvar uma lista de dados:

Python
import csv

produtos = [
    ['nome', 'preco', 'quantidade'],
    ['Notebook', 2500.00, 10],
    ['Mouse', 45.90, 150],
    ['Teclado', 120.00, 80]
]

with open('novos_produtos.csv', 'w', newline='', encoding='utf-8') as arquivo:
    escritor = csv.writer(arquivo)
    escritor.writerows(produtos)

O modo ‘w’ sobrescreve o arquivo se ele já existir. Use ‘a’ para adicionar conteúdo ao final de um arquivo existente. O parâmetro newline=” previne problemas com linhas em branco extras no Windows.

Para escrever usando dicionários, utilize DictWriter:

Python
import csv

produtos = [
    {'nome': 'Notebook', 'preco': 2500.00, 'quantidade': 10},
    {'nome': 'Mouse', 'preco': 45.90, 'quantidade': 150}
]

with open('produtos_dict.csv', 'w', newline='', encoding='utf-8') as arquivo:
    campos = ['nome', 'preco', 'quantidade']
    escritor = csv.DictWriter(arquivo, fieldnames=campos)
    
    escritor.writeheader()  # Escreve o cabeçalho
    escritor.writerows(produtos)

O método writeheader() cria automaticamente a primeira linha com os nomes das colunas. Isso economiza código e reduz erros ao garantir que os cabeçalhos correspondam aos dados.

Trabalhando com diferentes delimitadores

Nem todos os arquivos CSV usam vírgula como separador. No Brasil, é comum encontrar arquivos usando ponto e vírgula (;) devido ao uso da vírgula como separador decimal. Python permite especificar qualquer delimitador:

Python
import csv

# Lendo arquivo com ponto e vírgula
with open('dados.csv', 'r', encoding='utf-8') as arquivo:
    leitor = csv.reader(arquivo, delimiter=';')
    for linha in leitor:
        print(linha)

# Escrevendo com delimitador personalizado
with open('saida.csv', 'w', newline='', encoding='utf-8') as arquivo:
    escritor = csv.writer(arquivo, delimiter='|')
    escritor.writerow(['coluna1', 'coluna2', 'coluna3'])

O parâmetro delimiter aceita qualquer caractere. Além disso, você pode configurar o quotechar (caractere de citação) e escapechar (caractere de escape) para lidar com situações especiais onde os dados contêm o próprio delimitador.

Usando Pandas para operações avançadas com CSV

Para trabalhos mais complexos com dados, a biblioteca Pandas é imbatível. Ela oferece estruturas de dados poderosas e funções otimizadas que facilitam análise, limpeza e transformação de grandes volumes de informação.

Antes de usar Pandas, você precisa instalá-la. Abra seu terminal e execute:

Bash
pip install pandas

Ler um arquivo CSV com Pandas é extremamente simples:

Python
import pandas as pd

# Leitura básica
df = pd.read_csv('produtos.csv')
print(df)

# Visualizar primeiras linhas
print(df.head())

# Informações sobre o dataset
print(df.info())

A função read_csv() carrega os dados em um DataFrame, que é como uma planilha dentro do Python. Você pode visualizar, filtrar, ordenar e fazer cálculos de forma muito intuitiva.

Pandas detecta automaticamente o tipo de dados de cada coluna. Você pode personalizar essa leitura com diversos parâmetros:

Python
import pandas as pd

df = pd.read_csv('vendas.csv',
                 delimiter=';',
                 encoding='latin-1',
                 decimal=',',
                 thousands='.',
                 parse_dates=['data_venda'],
                 index_col='id')

Este exemplo mostra como lidar com particularidades de arquivos brasileiros: ponto e vírgula como delimitador, vírgula como separador decimal, ponto como separador de milhares, e conversão automática de datas.

Manipulando e filtrando dados CSV com Pandas

Depois de carregar os dados, Pandas oferece inúmeras formas de manipulá-los. Veja exemplos práticos:

Python
import pandas as pd

df = pd.read_csv('vendas.csv')

# Filtrar produtos com preço acima de 100 reais
produtos_caros = df[df['preco'] > 100]

# Selecionar colunas específicas
nomes_precos = df[['nome', 'preco']]

# Ordenar por preço decrescente
df_ordenado = df.sort_values('preco', ascending=False)

# Calcular estatísticas
preco_medio = df['preco'].mean()
total_estoque = df['quantidade'].sum()

print(f"Preço médio: R$ {preco_medio:.2f}")
print(f"Total em estoque: {total_estoque} unidades")

Pandas também facilita a criação de novas colunas calculadas. Por exemplo, calcular o valor total do estoque:

Python
df['valor_total'] = df['preco'] * df['quantidade']

# Agrupar dados por categoria
resumo = df.groupby('categoria')['valor_total'].sum()
print(resumo)

Essas operações seriam muito mais trabalhosas usando apenas a biblioteca csv padrão. Pandas foi projetada especificamente para tornar análise de dados eficiente e expressiva.

Salvando DataFrames como arquivos CSV

Após processar seus dados, você pode salvá-los facilmente de volta em formato CSV:

Python
import pandas as pd

df = pd.read_csv('dados_originais.csv')

# Fazer algum processamento
df['preco_com_desconto'] = df['preco'] * 0.9

# Salvar resultado
df.to_csv('dados_processados.csv', index=False, encoding='utf-8')

# Salvar formato brasileiro
df.to_csv('dados_br.csv', 
          sep=';', 
          decimal=',',
          encoding='utf-8',
          index=False)

O parâmetro index=False evita salvar a coluna de índice do DataFrame, que geralmente não é necessária. Configure sep e decimal para adaptar o arquivo ao padrão brasileiro quando necessário.

Lidando com arquivos CSV grandes

Quando você trabalha com arquivos muito grandes que não cabem na memória, Pandas oferece estratégias inteligentes. Uma delas é ler o arquivo em pedaços:

Python
import pandas as pd

tamanho_pedaco = 10000
processador = pd.read_csv('arquivo_grande.csv', chunksize=tamanho_pedaco)

for pedaco in processador:
    # Processar cada pedaço separadamente
    resultado = pedaco[pedaco['valor'] > 1000]
    print(f"Registros encontrados neste pedaço: {len(resultado)}")

Outra técnica é carregar apenas as colunas necessárias:

Python
colunas_necessarias = ['nome', 'preco', 'quantidade']
df = pd.read_csv('produtos.csv', usecols=colunas_necessarias)

# Ou pular linhas do início do arquivo
df = pd.read_csv('dados.csv', skiprows=1000, nrows=5000)

Essas abordagens permitem trabalhar com datasets de gigabytes mesmo em computadores com memória limitada. A chave é processar os dados incrementalmente em vez de tentar carregar tudo de uma vez.

Tratando dados ausentes e erros

Arquivos CSV do mundo real frequentemente contêm dados faltantes ou inconsistentes. Pandas facilita identificar e tratar esses problemas:

Python
import pandas as pd

df = pd.read_csv('vendas_incompletas.csv')

# Verificar valores ausentes
print(df.isnull().sum())

# Remover linhas com valores ausentes
df_limpo = df.dropna()

# Preencher valores ausentes com média
df['preco'].fillna(df['preco'].mean(), inplace=True)

# Substituir valores específicos
df['quantidade'].replace(0, 1, inplace=True)

Para tratar erros de leitura, use o parâmetro error_bad_lines:

Python
df = pd.read_csv('dados_problematicos.csv', 
                 error_bad_lines=False,
                 warn_bad_lines=True)

Isso ignora linhas malformadas e exibe avisos sobre os problemas encontrados, permitindo que você carregue o arquivo mesmo com algumas inconsistências.

Convertendo entre CSV e outros formatos

Pandas facilita conversões entre diferentes formatos de arquivo. Você pode ler CSV e exportar para Excel, JSON, ou bancos de dados:

Python
import pandas as pd

df = pd.read_csv('dados.csv')

# Exportar para Excel
df.to_excel('dados.xlsx', sheet_name='Planilha1', index=False)

# Exportar para JSON
df.to_json('dados.json', orient='records', force_ascii=False)

# Exportar para HTML (útil para relatórios)
df.to_html('relatorio.html', index=False)

E claro, funciona no sentido inverso também. Você pode ler Excel ou JSON e salvar como CSV, criando um fluxo de trabalho flexível para diferentes necessidades de projeto.

Boas práticas ao trabalhar com arquivos CSV

Para evitar problemas comuns e escrever código mais robusto, siga estas recomendações:

Sempre especifique o encoding. Arquivos brasileiros frequentemente usam ‘utf-8’ ou ‘latin-1’. Testar ambos pode economizar horas de debugging.

Use o contexto with para abrir arquivos. Isso garante que o arquivo seja fechado corretamente mesmo se ocorrer um erro durante o processamento.

Valide seus dados após carregar. Use df.info(), df.describe() e df.head() para verificar se os dados foram lidos corretamente antes de processá-los.

Mantenha backups dos arquivos originais. Antes de sobrescrever um CSV, faça uma cópia. Erros acontecem e ter o arquivo original pode salvar seu trabalho.

Documente o formato esperado. Se outras pessoas vão usar seu código, explique o formato CSV esperado, incluindo delimitador, encoding e estrutura de colunas.

Trate exceções adequadamente. Use blocos try-except para lidar com arquivos inexistentes ou corrompidos de forma elegante:

Python
import pandas as pd

try:
    df = pd.read_csv('dados.csv')
except FileNotFoundError:
    print("Arquivo não encontrado! Verifique o caminho.")
except pd.errors.EmptyDataError:
    print("O arquivo está vazio!")
except Exception as e:
    print(f"Erro inesperado: {e}")

Aplicações práticas de CSV em projetos reais

Arquivos CSV aparecem em inúmeros cenários profissionais. Sistemas de e-commerce exportam relatórios de vendas em CSV. Bancos de dados permitem backup e migração via CSV. Aplicações web frequentemente importam dados de planilhas convertidas para CSV.

Em ciência de dados, CSV é o formato padrão para compartilhar datasets de treinamento. Plataformas como Kaggle disponibilizam milhares de conjuntos de dados em CSV. Dominar a manipulação desses arquivos é essencial para competir em desafios de machine learning.

Desenvolvedores também usam CSV para automatizar tarefas repetitivas. Imagine ter que atualizar preços de centenas de produtos manualmente. Com Python e CSV, você escreve um script que faz isso em segundos, eliminando erros humanos.

Profissionais de negócios utilizam Python para consolidar relatórios de diferentes fontes. Cada departamento exporta seus dados em CSV, e um script Python combina tudo em uma análise unificada, economizando horas de trabalho manual.

Perguntas Frequentes (FAQ)

1. Qual a diferença entre CSV e Excel?
CSV é texto puro que armazena apenas dados tabulares, enquanto Excel pode conter fórmulas, formatação e múltiplas planilhas. CSV é mais leve e universal.

2. Como abrir arquivo CSV com acentos corretamente?
Use encoding=’utf-8′ ao abrir o arquivo. Se não funcionar, tente ‘latin-1’ ou ‘iso-8859-1’, comuns em sistemas Windows antigos.

3. Pandas ou biblioteca csv, qual usar?
Para análise de dados e operações complexas, use Pandas. Para tarefas simples de leitura/escrita, a biblioteca csv padrão é suficiente e mais leve.

4. Como lidar com arquivos CSV muito grandes?
Use o parâmetro chunksize do Pandas para processar o arquivo em pedaços, ou carregue apenas as colunas necessárias com usecols.

5. É possível ler CSV diretamente de uma URL?
Sim! Tanto csv quanto Pandas suportam isso. Com Pandas: df = pd.read_csv(‘https://exemplo.com/dados.csv’).

6. Como salvar CSV sem a coluna de índice?
Ao usar to_csv do Pandas, adicione o parâmetro index=False para não incluir o índice no arquivo salvo.

7. CSV pode conter caracteres especiais?
Sim, desde que o encoding correto seja usado. UTF-8 suporta todos os caracteres Unicode, incluindo emojis e acentos.

8. Como converter Excel para CSV em Python?
Use Pandas: pd.read_excel(‘arquivo.xlsx’).to_csv(‘saida.csv’, index=False). Simples e funciona para qualquer planilha.

9. É seguro armazenar senhas em CSV?
Não! CSV é texto puro sem criptografia. Para dados sensíveis, use bancos de dados com segurança adequada ou arquivos criptografados.

10. Como remover duplicatas de um CSV?
Com Pandas: df.drop_duplicates(inplace=True) remove todas as linhas duplicadas do DataFrame antes de salvar.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Foto de um calendário
    FundamentosBibliotecas
    Foto do Leandro Hirt

    Datas e Horas no Python com datetime

    Aprenda a trabalhar com datas e horas no Python usando o módulo datetime. Guia completo com exemplos práticos de formatação,

    Ler mais

    Tempo de leitura: 13 minutos
    10/12/2025
    Logo do Python + texto 'JSON'
    Fundamentos
    Foto do Leandro Hirt

    Como Trabalhar com JSON no Python

    JSON (JavaScript Object Notation) é um dos formatos de dados mais populares do mundo. Se você trabalha com APIs, armazenamento

    Ler mais

    Tempo de leitura: 13 minutos
    09/12/2025
    Programador pensando olhando para a tela
    Fundamentos
    Foto do Leandro Hirt

    Lógica de Programação com Python para Iniciantes

    Aprender lógica de programação com Python é uma das formas mais simples e agradáveis de começar no universo da tecnologia.

    Ler mais

    Tempo de leitura: 8 minutos
    09/12/2025
    Palavra Python escrita à mão em superfície amarela com desenho de carinha sorrindo.
    Fundamentos
    Foto do Leandro Hirt

    List Comprehension no Python para Iniciantes

    Aprenda list comprehension no Python de forma simples e prática. Descubra como criar listas de forma mais eficiente e elegante

    Ler mais

    Tempo de leitura: 13 minutos
    08/12/2025
    texto 'in' com o logo do Python ao lado
    Fundamentos
    Foto do Leandro Hirt

    Como usar o operador in no Python

    O operador in é uma das ferramentas mais úteis na programação Python. Ele permite verificar se um elemento existe dentro

    Ler mais

    Tempo de leitura: 15 minutos
    08/12/2025
    Logo do Python estilizada
    Fundamentos
    Foto do Leandro Hirt

    Todas as Funções Built-in do Python Explicadas

    Descubra todas as funções built-in do Python explicadas com exemplos práticos. Aprenda a usar print(), len(), input(), type() e mais

    Ler mais

    Tempo de leitura: 14 minutos
    08/12/2025

    Minicurso de Python

    Insira seu e-mail e para receber acesso às aulas agora mesmo