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.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: pathlib: caminhos modernos.
Os objetivos desta aula. 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.
Veja o essencial, parte por parte.
Caminhos como objetos, não como texto. Importe com from pathlib import Path e crie um caminho: Path('dados').
Consultar o caminho antes de agir. .name: nome do arquivo com extensão, como vendas.csv.
Ler e gravar texto em uma linha. Para arquivos de texto pequenos, o pathlib oferece dois atalhos que dispensam até o with.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
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) # dadosUm 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()) # Trueexists, 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()) # Truewrite_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.