2010-12-14 43 views

Répondre

172

Dans la plupart des cas, vous ne devriez pas utiliser une regex pour cela.

os.path.splitext(filename)[0] 

Cela traitera également un nom de fichier comme .bashrc correctement en gardant le nom entier.

+0

@nate c: Je modifié ma réponse pendant que vous écrivez votre commentaire . –

+2

Ne fonctionne pas correctement avec "git-1.7.8.tar.gz", où il ne supprime que le ".gz". J'utilise 'basename [: - len (". Tar.gz ")]' pour cela. – blueyed

+25

@blueyed: "Ne fonctionne pas correctement" est une question de perspective. Le fichier * est * un fichier gzip, dont le nom de base est 'git-1.7.8.tar'. Il n'y a aucun moyen de deviner correctement le nombre de points que l'appelant veut supprimer, donc 'splitext()' ne supprime que le dernier. Si vous voulez gérer des cas-bords comme '.tar.gz', vous devrez le faire à la main. Évidemment, vous ne pouvez pas enlever tous les points, puisque vous finirez avec 'git-1'. –

21
>>> import os 
>>> os.path.splitext("1.1.1.1.1.jpg") 
('1.1.1.1.1', '.jpg') 
5

Pas besoin de regex. os.path.splitext est votre ami:

os.path.splitext('1.1.1.jpg') 
>>> ('1.1.1', '.jpg') 
8

Si je devais le faire avec une expression régulière, je le ferais comme ceci:

s = re.sub(r'\.jpg$', '', s)