web-dev-qa-db-fra.com

Vérification de l'extension du fichier

Je travaille sur un certain programme et je dois le faire faire différentes choses si le fichier en question est un fichier flac ou un fichier mp3. Puis-je simplement l'utiliser?

 si m == * .mp3 
 .... 
 Elif m == * .flac 
 .... 

Je ne suis pas sûr que ça va marcher.

MODIFIER: Quand j'utilise ça, ça me dit une syntaxe invalide. Alors qu'est-ce que je fais?

130
wkoomson

En supposant que m est une chaîne, vous pouvez utiliser endswith:

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

Pour être sensible à la casse et éliminer une chaîne potentiellement importante, sinon:

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

(Merci à Wilhem Murdoch pour la liste des arguments à endswith)

290
lafras

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

os.path.splitext prend un chemin et divise l'extension du fichier à la 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 est un mp3! 
 folder1/folder/soundfile.flac est un fichier FLAC! ​​
51
Acorn

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

import fnmatch
import os

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

ou peut-être:

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

un moyen simple pourrait être:

import os

if os.path.splitext(file)[1] == ".mp3":
    # do something

os.path.splitext(file) retournera un tuple avec deux valeurs (le nom de fichier sans extension + uniquement l'extension). Le second index ([1]) ne vous donnera donc que l'extension. La chose intéressante est que de cette façon vous pouvez également accéder au nom de fichier assez facilement, si nécessaire!

5
upgrd

Utilisez pathlib À partir de Python3.4.

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

Un vieux fil, mais peut aider les futurs lecteurs ...

Je voudrais éviter d'utiliser . Lower () sur les noms de fichiers si ce n'est pour aucun autre raison que de rendre votre code plus indépendant de la plateforme. (linux est sensible à la casse, . lower () sur un nom de fichier sera corrompre votre logique éventuellement ... ou pire, un fichier important!)

Pourquoi ne pas utiliser re ? (Bien que pour être encore plus robuste, vous devriez vérifier l'en-tête de fichier magique de chaque fichier ... Comment vérifier le type de fichier sans extension en python? )

import re

def checkext(fname):   
    if re.search('\.mp3$',fname,flags=re.IGNORECASE):
        return('mp3')
    if re.search('\.flac$',fname,flags=re.IGNORECASE):
        return('flac')
    return('skip')

flist = ['myfile.mp3', 'myfile.MP3','myfile.mP3','myfile.mp4','myfile.flack','myfile.FLAC',
     'myfile.Mov','myfile.fLaC']

for f in flist:
    print "{} ==> {}".format(f,checkext(f)) 

Sortie:

myfile.mp3 ==> mp3
myfile.MP3 ==> mp3
myfile.mP3 ==> mp3
myfile.mp4 ==> skip
myfile.flack ==> skip
myfile.FLAC ==> flac
myfile.Mov ==> skip
myfile.fLaC ==> flac
2
Dan F.
if (file.split(".")[1] == "mp3"):
    print "its mp3"
Elif (file.split(".")[1] == "flac"):
    print "its flac"
else:
    print "not compat"
2
import os
source = ['test_sound.flac','ts.mp3']

for files in source:
   fileName,fileExtension = os.path.splitext(files)
   print fileExtension   # Print File Extensions
   print fileName   # It print file name
2
Rajan Mandanka
#!/usr/bin/python

import shutil, os

source = ['test_sound.flac','ts.mp3']

for files in source:
  fileName,fileExtension = os.path.splitext(files)

  if fileExtension==".flac" :
    print 'This file is flac file %s' %files
  Elif  fileExtension==".mp3":
    print 'This file is mp3 file %s' %files
  else:
    print 'Format is not valid'
1
nprak