HOWTO · Python
Python obtém o nome do arquivo sem extensão do caminho
Este tutorial demonstra como obter o nome do arquivo sem extensão do caminho do arquivo em Python
Nesta página
Para obter de um caminho o nome do arquivo sem o sufixo final, use Path(file_path).stem. Por exemplo, o caminho Desktop/folder/myfile.txt tem como stem myfile. Path.stem é uma propriedade, portanto, acesse-a sem parênteses. Os exemplos a seguir usam uma string de caminho e exibem o nome resultante.
Obtenha o nome do arquivo sem o sufixo final usando Path.stem
pathlib.Path lida com os separadores de caminho da plataforma atual, então você não precisa dividir o caminho manualmente. Crie um Path a partir da string e, em seguida, leia sua propriedade stem. Isso remove o sufixo final e mantém os pontos anteriores no nome do arquivo.
Execute este exemplo:
O código e os rótulos ou resultados exibidos nesta seção permanecem em inglês.
from pathlib import Path
file_path = "Desktop/folder/myfile.txt"
file_name = Path(file_path).stem
print(file_name)
myfile
Use os.path.splitext() para remover o sufixo final
A função da biblioteca padrão os.path.splitext() retorna um par: a parte do caminho anterior ao sufixo final e o próprio sufixo. Selecione o primeiro elemento para descartar esse sufixo. Se você também precisar apenas do último componente do caminho, dividir a string por / funciona neste exemplo, mas depende desse separador e é menos portátil entre sistemas operacionais.
Execute este exemplo:
O código e os rótulos ou resultados exibidos nesta seção permanecem em inglês.
import os
file_path = "Desktop/folder/myfile.txt"
path_without_suffix = os.path.splitext(file_path)[0]
file_name = path_without_suffix.split("/")[-1]
print(file_name)
myfile
Extraia o nome base antes de remover o sufixo
Para uma solução com os.path que reconhece caminhos, primeiro chame os.path.basename() para obter o último componente e, em seguida, passe esse resultado para os.path.splitext(). O nome base de Desktop/folder/myfile.txt é myfile.txt; ao remover seu sufixo final, obtém-se myfile. Esse padrão evita escolher manualmente um separador de caminho.
Execute este exemplo:
O código e os rótulos ou resultados exibidos nesta seção permanecem em inglês.
import os
file_path = "Desktop/folder/myfile.txt"
basename = os.path.basename(file_path)
file_name = os.path.splitext(basename)[0]
print(file_name)
myfile
Trate sufixos compostos e pontos nos nomes de arquivo
Essas abordagens padrão removem um único sufixo final, não todas as partes separadas por pontos. Para myfile.tar.gz, tanto Path.stem quanto os.path.splitext() produzem myfile.tar. Isso é útil quando apenas .gz é o sufixo. Se a aplicação tratar .tar.gz como um único sufixo composto, remova explicitamente esse sufixo conhecido, por exemplo, com name.removesuffix(".tar.gz"). str.removesuffix() foi adicionado no Python 3.9, portanto essa expressão requer o Python 3.9 ou posterior. Em versões anteriores, use name[:-len(".tar.gz")] if name.endswith(".tar.gz") else name para remover com segurança exatamente esse final.
Um nome sem sufixo, como README, continua sendo README com Path.stem e os.path.splitext(). Um nome iniciado por ponto, como .bashrc, é tratado como um arquivo oculto sem sufixo: Path(".bashrc").stem e os.path.splitext(".bashrc")[0] retornam .bashrc. Já archive. termina com um ponto: Path.stem o preserva em archive., enquanto os.path.splitext() trata o ponto como sufixo e retorna archive.
Dividir a string no primeiro ponto faz algo diferente: trunca o restante do nome. Para my.file.tar.gz, dividir no primeiro ponto produz my, enquanto remover apenas o sufixo final produz my.file.tar. Escolha conforme a tarefa: remover um sufixo composto conhecido, apenas o último sufixo ou tudo a partir do primeiro ponto. Dividir no primeiro ponto também transforma .bashrc em uma string vazia, por isso essa opção não é adequada quando nomes iniciados por ponto devem ser preservados.
Execute este exemplo:
O código e os rótulos ou resultados exibidos nesta seção permanecem em inglês.
from pathlib import Path
for name in ("myfile.tar.gz", "my.file.tar.gz"):
print(Path(name).stem)
print(name.split(".", 1)[0])
myfile.tar
myfile
my.file.tar
my