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.


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


10

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

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

6

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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.