Obtenir le nom de fichier sans extension en Python

Réponses:

203

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

os.path.splitext(filename)[0]

Cela permettra également de gérer .bashrccorrectement un nom de fichier en conservant le nom entier.

Marcelo Cantos
la source
4
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
28
@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 de bord comme .tar.gz, vous devrez le faire à la main. De toute évidence, vous ne pouvez pas supprimer tous les points, car vous vous retrouverez avec git-1.
Marcelo Cantos
26
>>> import os
>>> os.path.splitext("1.1.1.1.1.jpg")
('1.1.1.1.1', '.jpg')
Lennart Regebro
la source
10

Si je devais faire cela avec une regex, je le ferais comme ceci:

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

Pas besoin de regex. os.path.splitextest votre ami:

os.path.splitext('1.1.1.jpg')
>>> ('1.1.1', '.jpg')
Triptyque
la source
5

Vous pouvez utiliser la méthode stem pour obtenir le nom du fichier.

Voici un exemple:

from pathlib import Path

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