Você já trabalhou com CSV? Se essa é a primeira vez, ou se você precisa dar uma refrescada, aqui está. O CSV é um dos formatos mais comuns para armazenar e trocar dados estruturados. Normalmente, quando abrindo esse arquivo, é muito difícil de ler. Mas, o Python torna muito fácil trabalhar com isso. Nesse post vamos aprender como usar CSV com Python
Por causa da flexibilidade e habilidade de armazenar montanhas de dados, no mundo da ciência e análise de dados, o CSV é muito usado. Especialmente quando lidando com milhões de linhas. Para falar a verdade, já me perguntaram, em entrevistas, a minha habilidade de manusear CSV com Python.
Vamos aprender mais sobre esses arquivos.
O que são arquivos CSV?
CSV significa "Comma-Separated Values" (Valores Separados por Vírgula). É um formato simples onde cada linha representa um registro e as colunas são separadas por vírgulas. Por exemplo:
nome,idade,cidade
João,25,São Paulo
Maria,30,Rio de Janeiro
Pedro,22,Belo Horizonte
O Módulo csv do Python
Python já vem com o módulo CSV instalado por padrão, então não precisamos instalar nada extra. Vamos ver como usá-lo!
Antes de começar, vamos adicionar um arquivo de CSV para podermos trabalhar.
# criando um arquivo de exemplo
dados = [
['nome', 'idade', 'cidade'],
['Joâo', '25', 'Sâo Paulo'],
['Maria', '30', 'Rio de Janeiro']
]
# criando um arquivo para estudar
with open('pessoas.csv', 'w', newline='', encoding='utf-8') as arquivo:
escritor = csv.writer(arquivo)
escritor.writerows(dados)
Lendo arquivos CSV
Método básico com csv.reader()
import csv
# Abrindo e lendo um arquivo CSV
with open('pessoas.csv', 'r', encoding='utf-8') as arquivo:
leitor = csv.reader(arquivo)
# Lendo linha por linha
for linha in leitor:
print(linha)
Vamos entender cada parte dessa linha:
with open('pessoas.csv', 'r', encoding='utf-8') as arquivo:
Por que 'r'?
Nesse caso, só queremos dar uma olhada na nossa data. Não vamos fazer nenhuma mudança. Então escolhemos o r. O 'r' significa "read" (leitura). É o modo que diz ao Python: "eu quero apenas LER este arquivo". Se você tentar escrever em um arquivo aberto com 'r', dará erro!
Outros modos existem: 'w' (write/escrever). Esse modo deixa você fazer o que quiser com o arquivo (deletar, escrever, ler, e por aí vai). Outro método é o 'a' (append/adicionar). Esse modo você só pode adicionar. Não pode deletar.
Por que encoding='utf-8'?
Por que usamos o UTF-8? Isso é uma boa pergunta. É uma função essencial para lermos o conteúdo. O UTF-8 é um padrão para representar caracteres especiais (acentos, ç, etc.). Sem isso, palavras como "João" podem aparecer como "Jo√£o". É especialmente importante para textos em português.
Além disso o UTF-8 é utilizado como padrão mundial, e funciona em qualquer idioma.
Por que usar with?
O with, 'com' em português, é como um "guarda-costas" para arquivos. Ele garante que o arquivo seja fechado automaticamente, mesmo se der erro no meio do código, o arquivo será fechado. Isso evita problemas de memória e arquivos "travados".
Exemplo sem with (não recomendado):
Podemos também fazer sem with, mas seria algo assim.
# Forma antiga e problemática
arquivo = open('pessoas.csv', 'r', encoding='utf-8')
leitor = csv.reader(arquivo)
for linha in leitor:
print(linha)
arquivo.close() # Você precisa lembrar de fechar!
No final do código você precisa fechar usando o close() manualmente, ou o arquivo ficará travado e não poderá usá-lo novamente enquanto não fechar. Então, para evitar dor de cabeça no futuro, vamos usar um método mais adequado.
Como funciona csv.reader()?
leitor = csv.reader(arquivo)
O csv.reader() é como um "tradutor" que entende CSVs. Ele pega cada linha do arquivo e transforma em uma lista Python. Cada virgula vira uma separação entre itens da lista.
O loop for:
for linha in leitor:
print(linha)
No código acima percorremos linha por linha do arquivo. Cada linha é uma lista com os valores da linha. Por exemplo: ['João', '25', 'São Paulo']
Vamos ver isso na prática com um exemplo completo:
# Já importamos o pacote de csv, não precisamos importar novamente
# abrindo o arquivo
with open('pessoas.csv', 'r', encoding='utf-8') as arquivo:
escritor = csv.writer(arquivo)
escritor.writerows(dados_exemplo)
# Agora vamos ler o arquivo que criamos
print("Lendo o arquivo CSV:")
with open('pessoas.csv', 'r', encoding='utf-8') as arquivo:
leitor = csv.reader(arquivo)
for linha in leitor:
print(f"Linha lida: {linha}")
print(f"Tipo da linha: {type(linha)}")
print(f"Primeiro item: {linha[0]}")
print("-" * 30)

Pontos importantes:
Cada linha vira uma lista Python. Todos os valores são strings (texto), mesmo números. Se precisar de números, use int() ou float() para converter. O cabeçalho também é lido como uma linha normal.
Separando cabeçalho dos dados
Podemos fazer um código que separa o cabeçalho para nós. Usando a função next e chamando o leitor, separamos o cabeçalho. Essa função indica para o Python ler somente a primeira linha do arquivo, ou seja: o cabeçalho.
with open('pessoas.csv', 'r', encoding='utf-8') as arquivo:
leitor = csv.reader(arquivo)
# Primeira linha é o cabeçalho
cabecalho = next(leitor)
print(f"Colunas: {cabecalho}")
# Resto são os dados
for linha in leitor:
print(f"Nome: {linha[0]}, Idade: {linha[1]}, Cidade: {linha[2]}")

Pronto. Isso deixa a gente ler direitinho.
Mas desta maneira, você não consegue reusar o dados, pois só está imprimindo. Vamos explorar outras maneiras de usar os dados para análise quando preciso.
Usando DictReader para mais facilidade
O DictReader transforma cada linha em um dicionário, usando o cabeçalho como chaves:
import csv
with open('pessoas.csv', 'r', encoding='utf-8') as arquivo:
leitor = csv.DictReader(arquivo)
for linha in leitor:
print(f"Nome: {linha['nome']}")
print(f"Idade: {linha['idade']}")
print(f"Cidade: {linha['cidade']}")
print("-" * 20)

A variável leitor é um dicionário que pode ser reusado para outras funções. Além do mais, permite a impressão ficar bem mais bonita. Olha a diferença desse resultado contra os outros.
Escrevendo arquivos CSV
Vamos entender também como usar CSV para escrever:
with open('novo_arquivo.csv', 'w', newline='', encoding='utf-8') as arquivo:
Por que 'w'?
Neste caso, você pode observar que estamos usando o w. W de "write" que significa escrever em português. É importante ressaltar que se você usar essa função, se o arquivo existe, vai apagar todo o conteúdo. Se nada com esse nome existe, vai criar um arquivo novo com esse nome.
Cuidado ao usar essa função. Se o arquivo que está chamando "novo_arquivo.csv" existe, ele vai ser completamente sobrescrito. Se você quiser somente adicionar, use o 'a'.
Por que newline=''?
É importante chamar o newline, que significa linha nova. Sem isso, você pode acabar com linhas em branco extras no seu CSV. Isso acontence bastante, pricipalmente no Windows. Então, sempre use ao escrever CSVs para evitar problemas.
Exemplo comparativo:
# Sem newline='' (pode dar problema)
with open('problema.csv', 'w', encoding='utf-8') as arquivo:
escritor = csv.writer(arquivo)
escritor.writerow(['nome', 'idade'])
escritor.writerow(['Ana', '25'])
# Com newline='' (recomendado)
with open('correto.csv', 'w', newline='', encoding='utf-8') as arquivo:
escritor = csv.writer(arquivo)
escritor.writerow(['nome', 'idade'])
escritor.writerow(['Ana', '25'])
Resumo da sintaxe:
Vamos, novamente, falar sobre a sintaxe do with open:
- 'r' = apenas leitura
- 'w' = escrever (sobrescreve arquivo existente)
- 'a' = adicionar ao final
- encoding='utf-8' = suporte a acentos
- newline='' = evita linhas em branco extras (só na escrita)
- with = fecha o arquivo automaticamente
Escrevendo linha por linha
Nesse processo de escrever, você pode criar o seu próprio cabeçalho.
with open('vendas.csv', 'w', newline='', encoding='utf-8') as arquivo:
escritor = csv.writer(arquivo)
# Escrevendo o cabeçalho
escritor.writerow(['produto', 'preco', 'quantidade'])
# Escrevendo os dados
escritor.writerow(['Notebook', '2500.00', '3'])
escritor.writerow(['Mouse', '45.90', '10'])
escritor.writerow(['Teclado', '120.00', '5'])
Usando DictWriter
# Dados como lista de dicionários
vendas = [
{'produto': 'Smartphone', 'preco': '899.99', 'quantidade': '2'},
{'produto': 'Tablet', 'preco': '450.00', 'quantidade': '4'},
{'produto': 'Fone', 'preco': '89.90', 'quantidade': '15'}
]
with open('vendas_dict.csv', 'w', newline='', encoding='utf-8') as arquivo:
campos = ['produto', 'preco', 'quantidade']
escritor = csv.DictWriter(arquivo, fieldnames=campos)
# Escrevendo o cabeçalho
escritor.writeheader()
# Escrevendo os dados
escritor.writerows(vendas)
Lidando com diferentes separadores
Nem todos os CSVs usam vírgula como separador. Vamos ver como lidar com outros delimitadores:
# CSV com ponto e vírgula como separador
with open('dados_pt.csv', 'r', encoding='utf-8') as arquivo:
leitor = csv.reader(arquivo, delimiter=';')
for linha in leitor:
print(linha)
# Escrevendo com ponto e vírgula
with open('saida_pt.csv', 'w', newline='', encoding='utf-8') as arquivo:
escritor = csv.writer(arquivo, delimiter=';')
escritor.writerow(['nome', 'email', 'telefone'])
escritor.writerow(['João Silva', 'joao@email.com', '11999999999'])
Anexando Dados
Já falamos sobre ler e escrever, agora vamos falar sobre o anexar. Quando usando o ler (r), você só está olhando o documento. Não poderá fazer mudança nenhuma. Usando o escrever (w), se o arquivo existir, substituirá toda a informação. Se não existir, criará um documento novo.
Em contra partida, usando o anexar (a), se o arquivo não existir vai dar erro. Se existe, a informação entrará no final do documento.
Usando o nosso documento de vendas_dict, vamos adicionar mais uma linha de informação.
vendas_adicional = [
{'produto': 'Computador', 'preco': '950.00', 'quantidade': '5'}
]
with open('vendas_dict.csv', 'a', newline='', encoding='utf-8') as arquivo:
campos = ['produto', 'preco', 'quantidade']
escritor = csv.DictWriter(arquivo, fieldnames=campos)
escritor.writerows(vendas_adicional)
Observe que nesse processo, usamos os mesmos campos como o fieldnames, isso é importante. Também a formatação do dicionário é exatamente a mesma. Tudo isso colabora para um documento coerente.
Conclusão
Trabalhar com arquivos CSV com Python é simples e direto com o módulo csv. O mais importante é lembrar-se da função ideal para o seu caso. Vamos recapitular:
- Ler (r): É usado somente para ler o documento. Nada mais. Usando esse método você não consegue mudar nada.
- Escrever (w): O writer cria um documento se o mesmo não existe ou apaga toda a informação se existe. De qualquer forma, usando esse método é como criar um documento novo todas as vezes,
- Anexar (a): Finalmente, o anexar abre um documento que existe, não cria nada, e adiciona informações no final do documento. Lembre-se que para ter um documento limpo, a formatação dever ser a mesma do existente.
O CSV é uma ferramenta importantíssima para analise e ciência de dados. Aprendendo a usar isso com fluência vai te ajudar muito no futuro.
Comentários (0)
Seja o primeiro a comentar!
Deixe um comentário