289 votes

Comment puis-je vérifier l'extension d'un fichier ?

Je travaille sur un certain programme où je dois faire différentes choses en fonction de l'extension du fichier. Pourrais-je simplement utiliser ceci ?

if m == *.mp3
   ...
elif m == *.flac
   ...

0 votes

Utiliser le module python re (regex) pour la mise en correspondance

589voto

lafras Points 1565

En supposant que m est une chaîne de caractères, vous pouvez utiliser endswith :

if m.endswith('.mp3'):
...
elif m.endswith('.flac'):
...

Pour ne pas tenir compte de la casse, et pour éliminer une chaîne else-if potentiellement importante :

m.lower().endswith(('.png', '.jpg', '.jpeg'))

2 votes

ext = m.rpartition('.')[-1] ; if ext == sera beaucoup plus efficace

1 votes

@WilhelmMurdoch J'ai failli ne pas voir votre commentaire, je suis content de l'avoir vu.

0 votes

@volcano pourquoi ne pas utiliser .split('.')[-1] ? Ou la rpartition est-elle vraiment très efficace ?

74voto

Acorn Points 16562

os.path fournit de nombreuses fonctions pour manipuler les chemins/noms de fichiers. ( docs )

os.path.splitext prend un chemin et sépare l'extension de fichier de sa fin.

import os

filepaths = ["/folder/soundfile.mp3", "folder1/folder/soundfile.flac"]

for fp in filepaths:
    # Split the extension from the path and normalise it to lowercase.
    ext = os.path.splitext(fp)[-1].lower()

    # Now we can simply use == to check for equality, no need for wildcards.
    if ext == ".mp3":
        print fp, "is an mp3!"
    elif ext == ".flac":
        print fp, "is a flac file!"
    else:
        print fp, "is an unknown file format."

Donne :

/folder/soundfile.mp3 is an mp3!
folder1/folder/soundfile.flac is a flac file!

0 votes

Cette méthode ne tient pas compte des points de suspension. /.mp3 n'est pas considéré comme un fichier mp3. C'est cependant la façon dont un espace avant doit être traité. Par exemple .gitignore n'est pas un format de fichier

1 votes

Cela ne tient pas compte des noms de dossiers comportant des points. ( C:/folder.jpg/file.mp3 est un chemin valide). Vous pouvez les exclure avec os.path.isfile(m)

70voto

Greg Points 209

Utilisez pathlib À partir de Python3.4.

from pathlib import Path
Path('my_file.mp3').suffix == '.mp3'

0 votes

Cela ne tient pas compte des noms de dossiers comportant des points. ( C:/folder.jpg/file.mp3 est un chemin valide).

0 votes

@Stevoisiak que voulez-vous dire ? En quoi cela n'a-t-il pas été pris en compte ? Je viens d'essayer et .suffix rend correctement '.mp3'

0 votes

S'il existe un dossier nommé folder.mp3 le code ci-dessus pensera que le dossier est un fichier mp3.

20voto

John Gaines Jr. Points 4127

Regardez le module fnmatch. Il fera ce que vous essayez de faire.

import fnmatch
import os

for file in os.listdir('.'):
    if fnmatch.fnmatch(file, '*.txt'):
        print file

9voto

phynfo Points 1893

Ou peut-être :

from glob import glob
...
for files in glob('path/*.mp3'): 
  do something
for files in glob('path/*.flac'): 
  do something else

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