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?
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
)
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!
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
ou peut-être:
from glob import glob
...
for files in glob('path/*.mp3'):
do something
for files in glob('path/*.flac'):
do something else
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!
Utilisez pathlib
À partir de Python3.4.
from pathlib import Path
Path('my_file.mp3').suffix == '.mp3'
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
if (file.split(".")[1] == "mp3"):
print "its mp3"
Elif (file.split(".")[1] == "flac"):
print "its flac"
else:
print "not compat"
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
#!/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'