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

    Ilustração minimalista do logotipo da linguagem de programação Python ao lado do texto REGEX em fundo neutro
    Fundamentos
    Foto do Leandro Hirt

    Regex Python: Tudo Sobre Expressões Regulares

    Se você já tentou encontrar padrões específicos em textos, validar formatos de email ou extrair informações de documentos, provavelmente já

    Ler mais

    Tempo de leitura: 12 minutos
    05/01/2026
    Logo do Python, texto TXT e ícone de bloco de notas representando arquivos de texto
    Fundamentos
    Foto do Leandro Hirt

    Como Ler Arquivos TXT no Python

    Trabalhar com arquivos de texto é uma das tarefas mais comuns na programação. Aprender como ler arquivo TXT no Python

    Ler mais

    Tempo de leitura: 14 minutos
    24/12/2025
    Comparação visual entre Python 2 e Python 3 com ícones minimalistas
    Fundamentos
    Foto do Leandro Hirt

    Python 2 vs Python 3: Principais Diferenças

    Se você está começando a estudar Python ou já trabalha com a linguagem, provavelmente já se deparou com uma dúvida

    Ler mais

    Tempo de leitura: 20 minutos
    22/12/2025
    Pessoa pensando com um monitor desfocado ao fundo
    Fundamentos
    Foto do Leandro Hirt

    Tipos de Dados em Python: int, float, str, list e dict

    Aprenda tudo sobre os principais tipos de dados em Python: int, float, str, list e dict. Guia completo com exemplos

    Ler mais

    Tempo de leitura: 14 minutos
    21/12/2025
    Pessoa usando tablet com caneta digital para planejar tarefas em checklist, representando organização, planejamento e produtividade digital.
    Fundamentos
    Foto do Leandro Hirt

    Como Ordenar Listas no Python (Sort vs Sorted)

    Você já ficou confuso sobre quando usar sort() ou sorted() para organizar suas listas em Python? Não está sozinho. Esses

    Ler mais

    Tempo de leitura: 12 minutos
    20/12/2025
    Logo do Python com uma faca, simbolizando fatiamento
    Fundamentos
    Foto do Leandro Hirt

    Fatiamento em Python: Tudo Sobre Slicing

    O fatiamento (ou slicing) é uma técnica fundamental em Python que permite extrair partes específicas de sequências como listas, strings

    Ler mais

    Tempo de leitura: 11 minutos
    13/12/2025