39 € por curso49,90 €/mês por todos os 3.000 cursos
Tudo.guru
Voltar ao caminho

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.