Question Extraire l'extension du nom de fichier dans Python


Y at-il une fonction pour extraire l'extension d'un nom de fichier?


885
2018-02-12 14:11


origine


Réponses:


Oui. Utilisation os.path.splitext(voir Documentation Python 2.X ou Documentation Python 3.X):

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

1408
2018-02-12 14:12



import os.path
extension = os.path.splitext(filename)[1]

308
2018-02-12 14:15



Nouveau dans la version 3.4.

import pathlib

print(pathlib.Path('yourPathGoesHere').suffix)

Je suis surpris que personne n'a mentionné pathlib encore, pathlib Est génial!

Si vous avez besoin de tous les suffixes (par exemple si vous avez un .tar.gz), .suffixes retournera une liste d'entre eux!


93
2018-02-03 21:41



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

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


77
2017-08-26 09:37



Une option peut être séparée de dot:

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

Pas d'erreur quand 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

54
2018-04-09 18:48



Il vaut la peine d'ajouter un peu plus bas pour que vous ne vous demandiez pas pourquoi les JPG n'apparaissent pas dans votre liste.

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

26
2017-12-28 07:25



Toutes les solutions ci-dessus fonctionnent, mais sur Linux, j'ai trouvé qu'il y a un retour à la ligne à la fin de la chaîne d'extension, ce qui empêchera les correspondances de réussir. Ajouter le strip() méthode à la fin. Par exemple:

import os.path
extension = os.path.splitext(filename)[1][1:].strip() 

10
2017-10-10 22:48



Avec splitext, il y a des problèmes avec les fichiers à double extension (par ex. file.tar.gz, file.tar.bz2, etc..)

>>> fileName, fileExtension = os.path.splitext('/path/to/somefile.tar.gz')
>>> fileExtension 
'.gz'

mais devrait être: .tar.gz

Les solutions possibles sont ici


9
2018-02-05 00:19



filename='ext.tar.gz'
extension = filename[filename.rfind('.'):]

7
2018-02-18 10:55



Bien que ce soit un vieux sujet, mais je me demande pourquoi il n'y en a aucun mentionnant une api très simple de python appelée rpartition dans ce cas:

Pour obtenir l'extension d'un chemin absolu de fichier donné, vous pouvez simplement taper:

filepath.rpartition('.')[-1]

Exemple:

path = '/home/jersey/remote/data/test.csv'
print path.rpartition('.')[-1]

vous donnera: 'csv'


5
2018-02-27 03:53



Surpris cela n'a pas encore été mentionné:

import os
fn = '/some/path/a.tar.gz'

basename = os.path.basename(fn)  # os independent
Out[] a.tar.gz

base = basename.split('.')[0]
Out[] a

ext = '.'.join(basename.split('.')[1:])   # <-- main part

# if you want a leading '.', and if no result `None`:
ext = '.' + ext if ext else None
Out[] .tar.gz

Avantages:

  • Fonctionne comme prévu pour tout ce que je peux penser à
  • Aucun module
  • Pas de regex
  • Cross-plateforme
  • Facilement extensible (par exemple, aucun point principal pour l'extension, seulement la dernière partie de l'extension)

En fonction:

def get_extension(filename):
    basename = os.path.basename(filename)  # os independent
    ext = '.'.join(basename.split('.')[1:])
    return '.' + ext if ext else None

4
2017-12-20 00:24