PATHLIB E SHUTIL EM PYTHON Material do Prof.
Gustavo Franz (Science/Biology)
PATHLIB E SHUTIL EM PYTHON Path
Caminhos e arquivos no Python — baseado na documentacao oficial 3.14.6
Prof. Gustavo Franz (Science/Biology)
Python Developer in Progress
Building Educational Solutions with Python
GitHub: [Link]/GustaFranz
Por que Path em vez de string?
String x Path
Aspecto String Path
Juntar pastas 'pasta' + '/' + 'arquivo' pasta / 'arquivo'
Portabilidade Barras \ ou / manual Ajusta ao sistema
Metodos uteis [Link] separado .exists(), .glob(), etc.
Legibilidade Caminho longo confuso Objeto com propriedades
Importar Path e operador /
Path e a classe principal para caminhos concretos. Ela representa um caminho real no disco da plataforma em que
o codigo roda.
from pathlib import Path
pasta = Path('dados')
arquivo = pasta / 'simulado_7ano.csv'
print(arquivo) # dados/simulado_7ano.csv
__file__ e .parent
__file__ guarda o caminho do script em execucao. Com .parent voce sobe um nivel na arvore de pastas — essencial
para achar dados/ sem caminho fixo.
pasta_projeto = Path(__file__).resolve().parent
pasta_dados = pasta_projeto / 'dados'
print(pasta_projeto)
print(pasta_dados.exists())
Regra de ouro
Nunca use C:/Users/... fixo no codigo.
Use Path(__file__).parent para achar a pasta do exercicio.
Baseado na documentacao
Python Developer oficial
in Progress —Python 3.14.6
[Link]/GustaFranz Pagina 1
PATHLIB E SHUTIL EM PYTHON Material do Prof. Gustavo Franz (Science/Biology)
Arvore de pastas do projeto boletim
No projeto automacao-dashboard-boletim-escolar, os modulos ficam em src/ e acessam dados/ e saidas/ na raiz
com .[Link].
Estrutura de pastas
automacao-dashboard-boletim-escolar/
■■■ src/
■■■ leitor_simulados.py
■■■ automacao_portal.py
■■■ [Link]
■■■ dados/
■■■ simulados/
■■■ provas/
■■■ saidas/
■■■ boletins/
# Script em src/[Link]
raiz = Path(__file__).resolve().[Link]
pasta_simulados = raiz / 'dados' / 'simulados'
pasta_saidas = raiz / 'saidas' / 'boletins'
Fluxo:
src/[Link] → .parent → .parent → raiz do projeto
Propriedades do caminho
caminho = Path('dados/simulado_7ano.csv')
[Link] # simulado_7ano.csv
[Link] # simulado_7ano
[Link] # .csv
[Link] # dados
[Link] # ('dados', 'simulado_7ano.csv')
Referencia rapida
Propriedade Retorna Exemplo
.name Nome com extensao [Link]
.stem Nome sem extensao notas
.suffix Extensao .csv
.parent Pasta pai dados/
.parts Tupla de partes ('/', 'etc', 'hosts')
exists(), is_file(), is_dir()
Baseado na documentacao
Python Developer oficial
in Progress —Python 3.14.6
[Link]/GustaFranz Pagina 2
PATHLIB E SHUTIL EM PYTHON Material do Prof. Gustavo Franz (Science/Biology)
Fluxo:
Caminho → exists()? → is_file()? → Agir com seguranca
arquivo = pasta_dados / 'simulado_7ano.csv'
if [Link]():
print('Arquivo encontrado')
if arquivo.is_file():
print('E um arquivo')
if pasta_dados.is_dir():
print('E uma pasta')
Padrao do projeto real
Sempre verificar .exists() antes de ler ou mover.
Evita FileNotFoundError e mensagens confusas.
Usado em automacao_portal.py antes do [Link].
glob() e rglob() — buscar arquivos
glob busca na pasta atual; rglob busca recursivamente em subpastas. Retornam um iterador de objetos Path.
Padroes comuns
Padrao O que encontra
'*.csv' CSV na pasta atual
'**/*.csv' CSV em qualquer subpasta
'simulado_*.csv' CSV com prefixo simulado_
'*.xlsx' Planilhas Excel
pasta = Path('dados')
for csv in [Link]('*.csv'):
print(csv)
for csv in [Link]('**/*.csv'):
print([Link]())
mkdir(), touch(), unlink()
pasta_saida = raiz / 'saidas' / 'boletins'
pasta_saida.mkdir(parents=True, exist_ok=True)
arquivo = pasta_saida / 'aluno_01.html'
[Link]() # cria vazio se nao existir
[Link]() # apaga o arquivo
Baseado na documentacao
Python Developer oficial
in Progress —Python 3.14.6
[Link]/GustaFranz Pagina 3
PATHLIB E SHUTIL EM PYTHON Material do Prof. Gustavo Franz (Science/Biology)
Metodo Funcao Parametro importante
mkdir() Cria pasta parents=True, exist_ok=True
touch() Cria arquivo vazio —
unlink() Remove arquivo Verificar exists() antes
rename() Renomeia/move Destino nao pode existir*
parents=True cria pastas intermediarias. exist_ok=True evita erro se a pasta ja existir.
read_text() e write_text()
Metodos convenientes para ler e gravar texto. Sempre use encoding='utf-8' para acentos e caracteres especiais.
conteudo = arquivo.read_text(encoding='utf-8')
html = '<html><body><h1>Boletim</h1></body></html>'
destino = pasta_saida / 'boletim_aluno.html'
destino.write_text(html, encoding='utf-8')
Exemplo do projeto boletim
[Link] grava CSV em saidas/
[Link] gera HTML por aluno com write_text.
Sempre criar pasta de saida com mkdir antes.
resolve(), absolute(), relative_to()
p = Path('dados/../dados/[Link]')
[Link]() # caminho absoluto, sem ..
[Link]() # absoluto a partir do cwd
base = Path('/projeto')
arquivo = base / 'dados/[Link]'
arquivo.relative_to(base) # dados/[Link]
Fluxo:
Path(__file__) → .resolve() → .parent → .parent → raiz
resolve() elimina .. e links simbolicos quando possivel. Use para exibir caminhos completos ou comparar
localizacoes.
Shutil — operacoes de alto nivel
O modulo shutil complementa o pathlib: pathlib localiza caminhos; shutil copia, move e remove arquivos e pastas
inteiras.
Baseado na documentacao
Python Developer oficial
in Progress —Python 3.14.6
[Link]/GustaFranz Pagina 4
PATHLIB E SHUTIL EM PYTHON Material do Prof. Gustavo Franz (Science/Biology)
Qual funcao de copia usar?
Funcao Copia conteudo Copia metadados
copyfile() Sim Nao
copy() Sim Permissoes
copy2() Sim Permissoes + datas
copystat() Nao So metadados
import shutil
[Link]('[Link]', '[Link]')
shutil.copy2('[Link]', '[Link]')
move(), copytree(), rmtree()
Fluxo:
Downloads/ → exists()? → unlink destino → [Link] → dados/simulados/
def mover_csv_baixado(nome: str) -> None:
origem = pasta_downloads / nome
destino = pasta_simulados / nome
if not [Link]():
print('Origem nao encontrada')
return
if [Link]():
[Link]()
[Link](origem, destino)
print(f'Arquivo movido para: {destino}')
Funcoes extras uteis:
[Link]('src_pasta', 'dst_pasta')
[Link]('pasta_temp')
shutil.disk_usage('/') # total, usado, livre
[Link]('python') # caminho do executavel
Exercicio integrado
Combine pathlib + shutil: (1) glob para achar CSV em downloads/, (2) mkdir em dados/simulados/, (3) move com
shutil, (4) confirme com exists().
Baseado na documentacao
Python Developer oficial
in Progress —Python 3.14.6
[Link]/GustaFranz Pagina 5
PATHLIB E SHUTIL EM PYTHON Material do Prof. Gustavo Franz (Science/Biology)
Prof. Gustavo Franz (Science/Biology)
Python Developer in Progress
Building Educational Solutions with Python
Professor de Ciencias e Biologia desde 2013 — atualmente estudando Programacao.
Eu crio estes resumos para organizar os assuntos e estudar de forma clara e objetiva. Estou compartilhando porque
eles tambem podem ajudar outros desenvolvedores que estao comecando. Bons estudos — vamos aprender juntos!
GitHub: [Link]/GustaFranz
Exercicios Python: [Link]/GustaFranz/python_exercises
Para quem quiser ver a resolucao dos meus exercicios em Python.
EasyAnsi: [Link]/GustaFranz/easyansi
Para quem quiser codificar personalizando com cores e estilos de forma mais facil, pratica e intuitiva.
Baseado na documentacao
Python Developer oficial
in Progress —Python 3.14.6
[Link]/GustaFranz Pagina 6