1744 votes

Extraction de l'extension d'un nom de fichier en Python

Existe-t-il une fonction permettant d'extraire l'extension d'un nom de fichier ?

2531voto

nosklo Points 75862

Oui. Utilisez os.path.splitext (voir Documentation Python 2.X o Documentation Python 3.X ):

>>> import os
>>> filename, file_extension = os.path.splitext('/path/to/somefile.ext')
>>> filename
'/path/to/somefile'
>>> file_extension
'.ext'

Contrairement à la plupart des tentatives de séparation manuelle des chaînes de caractères, os.path.splitext traitera correctement /a/b.c/d comme n'ayant pas d'extension au lieu d'avoir une extension .c/d et il traitera .bashrc comme n'ayant pas d'extension au lieu d'avoir une extension .bashrc :

>>> os.path.splitext('/a/b.c/d')
('/a/b.c/d', '')
>>> os.path.splitext('.bashrc')
('.bashrc', '')

22 votes

L'utilisation de basename est un peu confus ici puisque os.path.basename("/path/to/somefile.ext") rendrait "somefile.ext"

2 votes

Voir également les idées ci-dessous concernant lower() et des extensions doubles

21 votes

Ne serait pas endswith() ne serait-il pas plus portable et pythonique ?

483voto

Brian Neal Points 13668
import os.path
extension = os.path.splitext(filename)[1]

24 votes

Par curiosité, pourquoi import os.path au lieu de from os import path ?

1 votes

@kiswa - Je suppose que vous pourriez le faire de cette façon. J'ai vu plus de code utilisant import os.path cependant.

8 votes

Oh, je me demandais juste s'il y avait une raison spécifique derrière cela (autre que la convention). Je suis encore en train d'apprendre Python et je voulais en savoir plus !

141voto

wonzbak Points 694
import os.path
extension = os.path.splitext(filename)[1][1:]

Pour obtenir uniquement le texte de l'extension, sans le point.

1 votes

Ceci retournera un résultat vide si les deux noms de fichiers se terminent par . et les noms de fichiers sans extension.

107voto

Murat Corlu Points 2751

Pour les cas d'utilisation simples, une option peut être de se séparer de dot :

>>> filename = "example.jpeg"
>>> filename.split(".")[-1]
'jpeg'

Pas d'erreur lorsque le fichier n'a pas d'extension :

>>> "filename".split(".")[-1]
'filename'

Mais vous devez faire attention :

>>> "png".split(".")[-1]
'png'    # But file doesn't have an extension

Il ne fonctionne pas non plus avec les fichiers cachés des systèmes Unix :

>>> ".bashrc".split(".")[-1]
'bashrc'    # But this is not an extension

Pour un usage général, préférez os.path.splitext

5 votes

Cela serait contrarié si vous téléchargez x.tar.gz

21 votes

Pas vraiment. L'extension d'un fichier nommé "x.tar.gz" est "gz" et non "tar.gz". os.path.splitext donne également ".os" comme extension.

0 votes

Cela fonctionne lorsque vous traitez des fichiers pour des plateformes autres que celle que vous exécutez.

42voto

blented Points 187

Cela vaut la peine d'ajouter un bas de page pour que vous ne vous demandiez pas pourquoi les JPG n'apparaissent pas dans votre liste.

os.path.splitext(filename)[1][1:].strip().lower()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X