Aula de prévia
Ler caminhos, nomes e extensões
30 minutos · Python básico para organizar melhor
Nesta aula vai distinguir um caminho de um ficheiro, obter o nome e a extensão sem cortar texto à mão e construir um destino mantendo o nome original. Precisa de Python 3.12, de saber executar um ficheiro .py e de bases de variáveis, funções, condições, listas e dicionários. A leitura dos comentários faz parte da prática. Reserve 25–35 minutos, incluindo o exercício.
Uma pasta de descarregamentos costuma misturar documentos, imagens e ficheiros sem extensão. Antes de organizar qualquer coisa, precisamos de descrever o que existe. Um caminho é uma indicação de localização: representá-lo em Python não cria nem altera o objeto a que se refere. Esta diferença permite preparar decisões sem escrever no disco.
PurePath serve para compor e analisar caminhos segundo o sistema em utilização. Path acrescenta operações sobre o sistema de ficheiros, como listar uma pasta. Ambos permitem usar / para juntar componentes. Este operador não significa divisão quando o lado esquerdo é um destes objetos. Trabalhe com componentes explícitos; não faça substituições de barras dentro de uma cadeia de texto.
No exemplo, name devolve o último componente, stem retira apenas a última extensão e suffix devolve essa extensão com o ponto. Em copia.tar.gz, o sufixo é .gz, não .tar.gz. Um nome como .preferencias não tem sufixo nesta versão de Python. Vamos usar casefold() para comparar extensões sem depender de maiúsculas. O nome original permanece intacto. Consulte a referência de caminhos e propriedades do Python para os detalhes destas operações.
Exemplo executável
Guarde e execute o bloco completo. Só o trecho dentro de TemporaryDirectory cria um ficheiro de ensaio. Ao sair do contexto, essa pasta de ensaio é removida automaticamente; nenhum caminho pessoal é utilizado.
python
from pathlib import Path, PurePath
from tempfile import TemporaryDirectory
nomes = ["Recibo.PDF", "copia.tar.gz", ".preferencias", "LEIA-ME"]
for nome in nomes:
caminho = PurePath("entrada") / nome
print(caminho.name, caminho.stem, caminho.suffix.casefold())
assert PurePath("copia.tar.gz").stem == "copia.tar"
assert PurePath(".preferencias").suffix == ""
with TemporaryDirectory() as pasta:
original = Path(pasta) / "notas.txt"
original.write_text("Rever recibos\n", encoding="utf-8")
destino_planeado = Path(pasta) / "organizados" / original.name
print("Origem:", original.name)
print("Destino previsto:", destino_planeado.relative_to(pasta))
assert original.read_text(encoding="utf-8") == "Rever recibos\n"
assert not destino_planeado.exists()Observe que construir destino_planeado não criou a pasta organizados. Esta será uma regra do curso: uma prévia descreve operações; a execução realiza-as. Também não estamos a confirmar o conteúdo de um PDF. A extensão é apenas um indício para escolher uma categoria e pode estar errada. Classificar por extensão não substitui abrir ou validar um formato.
Exercício e solução
Crie uma função que receba um nome e devolva um par: o nome original e a extensão normalizada. Se não houver extensão, use sem extensão. Experimente Mapa.PNG, arquivo.tar.gz e LEIA-ME. Execute esta solução depois do bloco anterior, no mesmo ficheiro:
python
def identificar(nome):
caminho = PurePath(nome)
extensao = caminho.suffix.casefold() or "sem extensão"
return caminho.name, extensao
assert identificar("Mapa.PNG") == ("Mapa.PNG", ".png")
assert identificar("arquivo.tar.gz") == ("arquivo.tar.gz", ".gz")
assert identificar("LEIA-ME") == ("LEIA-ME", "sem extensão")
print([identificar(nome) for nome in nomes])Concluiu quando consegue explicar por que Mapa.PNG mantém as maiúsculas no nome, mas produz .png na comparação, e quando confirma que a prévia não criou o destino. A função recebe nomes de exemplo; a validação de nomes recebidos de outras fontes será feita na quarta aula.
O restante fica na tua biblioteca.
Cria a conta, confirma o email e escolhe entre comprar este caminho ou aderir ao Passe Total.