Obtenha o nome do arquivo sem extensão em Python

Respostas:

203

Na maioria dos casos, você não deve usar um regex para isso.

os.path.splitext(filename)[0]

Isso também tratará um nome de arquivo .bashrccorretamente, mantendo o nome completo.

Marcelo Cantos
fonte
4
Não funciona corretamente com "git-1.7.8.tar.gz", onde apenas remove o ".gz". Eu uso basename[:-len(".tar.gz")]para isso.
azulado em
28
@blueyed: "Não funciona corretamente" é uma questão de perspectiva. O arquivo é um arquivo gzip, cujo nome base é git-1.7.8.tar. Não há como adivinhar corretamente quantos pontos o chamador deseja remover, então splitext()apenas remove o último. Se quiser lidar com casos extremos .tar.gz, você terá que fazer isso manualmente. Obviamente, você não pode retirar todos os pontos, pois acabará com git-1.
Marcelo Cantos
26
>>> import os
>>> os.path.splitext("1.1.1.1.1.jpg")
('1.1.1.1.1', '.jpg')
Lennart Regebro
fonte
10

Se eu tivesse que fazer isso com uma regex, faria assim:

s = re.sub(r'\.jpg$', '', s)
Alan Moore
fonte
6

Não há necessidade de regex. os.path.splitexté seu amigo:

os.path.splitext('1.1.1.jpg')
>>> ('1.1.1', '.jpg')
Tríptico
fonte
5

Você pode usar o método stem para obter o nome do arquivo.

Aqui está um exemplo:

from pathlib import Path

p = Path(r"\\some_directory\subdirectory\my_file.txt")
print(p.stem)
# my_file
Vlad Bezden
fonte