Módulo 8 - Arquivos CSV e pathlib

pathlib: caminhos modernos

11 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Criar caminhos com Path e juntar partes com o operador barra.
  • Consultar exists, name e suffix de um caminho.
  • Ler e gravar texto direto com read_text e write_text.
  • Entender por que Path é melhor que juntar strings de caminho.

Caminhos como objetos, não como texto

Durante muito tempo, lidar com caminhos em Python significava colar textos: 'dados' + '/' + 'vendas.csv'. Isso funciona até o dia em que você esquece a barra, ou coloca duas, ou roda o programa no Windows, que usa a contrabarra em vez da barra. O pathlib resolve tudo isso tratando o caminho como um objeto, e não como texto solto. Você importa Path, cria um caminho e usa métodos claros. O código fica mais legível e funciona igual no Windows, no Linux e no Mac.

from pathlib import Path

pasta = Path("dados")
arquivo = pasta / "vendas.csv"

print(arquivo)          # dados/vendas.csv (ou dados\vendas.csv no Windows)
print(arquivo.name)     # vendas.csv
print(arquivo.suffix)   # .csv
print(arquivo.stem)     # vendas
print(arquivo.parent)   # dados

Um Path junta partes com barra e responde name, suffix, stem e parent.

O detalhe mais bonito é o operador barra. Escrever pasta / 'vendas.csv' junta as duas partes com o separador certo do sistema, sem você se preocupar com barra ou contrabarra. O objeto resultante ainda sabe responder perguntas sobre si mesmo: .name devolve o nome do arquivo com extensão, .suffix devolve só a extensão, .stem devolve o nome sem extensão e .parent devolve a pasta que o contém. Tudo isso sem fatiar strings na mão, o que era trabalhoso e fácil de errar.

Consultar o caminho antes de agir

Antes de abrir um arquivo, muitas vezes você quer saber se ele existe, para não estourar um erro. O pathlib torna isso natural: o método exists devolve verdadeiro ou falso. Há também is_file e is_dir, para distinguir um arquivo de uma pasta. Com isso, seu programa toma decisões antes de tentar ler algo que talvez não esteja lá, o que deixa o comportamento mais previsível e as mensagens ao usuário mais amigáveis.

from pathlib import Path

arquivo = Path("dados") / "vendas.csv"

if arquivo.exists():
    print(f"Encontrei {arquivo.name}")
else:
    print("Arquivo nao encontrado; verifique o caminho.")

# Encontrei vendas.csv

print(arquivo.is_file())   # True
print(Path("dados").is_dir())  # True

exists, is_file e is_dir deixam o programa conferir o caminho antes de agir.

Um uso comum de suffix é filtrar arquivos por tipo. Ao percorrer uma pasta, você pode processar só os que terminam em .csv e ignorar o resto, comparando arquivo.suffix == '.csv'. Combinado com o método iterdir, que lista o conteúdo de uma pasta, o pathlib deixa fácil escrever um programa que varre uma pasta inteira e trata cada planilha. Você não precisa disso no relatório desta trilha, mas é bom saber que a ferramenta cresce com a necessidade.

Ler e gravar texto em uma linha

Para arquivos de texto pequenos, o pathlib oferece dois atalhos que dispensam até o with. O método read_text lê o arquivo inteiro e devolve o conteúdo como uma string. O write_text grava uma string inteira em um arquivo, criando ou sobrescrevendo. São perfeitos para ler uma configuração curta, salvar um pequeno relatório em texto ou gravar um bloco pronto. Para CSV grande, você continua preferindo o módulo csv com with, que processa linha a linha; para texto simples, esses métodos são mais diretos.

from pathlib import Path

relatorio = Path("resumo.txt")
relatorio.write_text("Vendas de junho: R$ 1250,00\n", encoding="utf-8")

conteudo = relatorio.read_text(encoding="utf-8")
print(conteudo)  # Vendas de junho: R$ 1250,00

print(relatorio.exists())  # True

write_text grava uma string inteira; read_text devolve o conteúdo, sem precisar de with.

Repare que ainda passamos encoding='utf-8', pela mesma razão de sempre: garantir que acentos sejam gravados e lidos corretamente. Esses métodos não substituem o módulo csv, e sim complementam: eles são para o texto todo de uma vez, enquanto o csv é para dados tabulares processados linha a linha. Na prática do fim do módulo você usa o Path para montar os caminhos de entrada e saída, e o módulo csv para o trabalho pesado de ler e gravar as tabelas. Cada ferramenta no seu lugar.

Teste rápido

Por que usar Path('dados') / 'vendas.csv' é melhor que 'dados' + '/' + 'vendas.csv'?

Perguntas frequentes

Preciso importar algo para usar Path?
Sim, uma linha: from pathlib import Path. O pathlib faz parte da biblioteca padrão, então não se instala nada. Depois disso, você cria caminhos com Path('pasta') e usa o operador barra, os métodos e as propriedades apresentados na aula.
O pathlib funciona igual no Windows e no Linux?
Sim, e essa é uma das maiores vantagens. Você escreve o mesmo código com o operador barra e o pathlib usa o separador correto de cada sistema por baixo dos panos: barra no Linux e no Mac, contrabarra no Windows. O seu programa fica portável sem esforço.
Qual a diferença entre .name, .stem e .suffix?
Para o arquivo vendas.csv: .name devolve 'vendas.csv' (nome completo), .stem devolve 'vendas' (sem extensão) e .suffix devolve '.csv' (só a extensão). O .suffix é ótimo para filtrar arquivos por tipo ao varrer uma pasta.
Quando usar read_text e write_text em vez do módulo csv?
Use read_text e write_text para texto simples e pequeno, como uma configuração ou um resumo curto, quando quer o conteúdo inteiro de uma vez. Use o módulo csv com with para dados tabulares, que são processados linha a linha e podem ser grandes.
O write_text apaga o arquivo anterior?
Sim. O write_text cria o arquivo se ele não existe e sobrescreve o conteúdo se ele já existe, como o modo 'w'. Se você precisa acrescentar ao fim sem apagar, o pathlib não faz isso diretamente; abra com open no modo 'a' para esse caso.
Ainda preciso do with quando uso o módulo csv com pathlib?
Sim. O pathlib monta e consulta caminhos, mas para ler ou gravar CSV linha a linha você abre o Path com open dentro de um with, como nas aulas anteriores. Um Path pode ser passado direto ao open. Os atalhos read_text e write_text é que dispensam o with, e servem só para texto inteiro.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.