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')
Respostas:
Na maioria dos casos, você não deve usar um regex para isso.
Isso também tratará um nome de arquivo
.bashrc
corretamente, mantendo o nome completo.fonte
basename[:-len(".tar.gz")]
para isso.git-1.7.8.tar
. Não há como adivinhar corretamente quantos pontos o chamador deseja remover, entãosplitext()
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á comgit-1
.fonte
Se eu tivesse que fazer isso com uma regex, faria assim:
fonte
Não há necessidade de regex.
os.path.splitext
é seu amigo:fonte
Você pode usar o método stem para obter o nome do arquivo.
Aqui está um exemplo:
fonte