Je travaille sur un certain programme où je dois faire différentes choses en fonction de l'extension du fichier. Puis-je simplement utiliser ceci?
if m == *.mp3
...
elif m == *.flac
...
Je travaille sur un certain programme où je dois faire différentes choses en fonction de l'extension du fichier. Puis-je simplement utiliser ceci?
if m == *.mp3
...
elif m == *.flac
...
Réponses:
En supposant qu'il m
s'agit d'une chaîne, vous pouvez utiliser endswith
:
if m.endswith('.mp3'):
...
elif m.endswith('.flac'):
...
Pour être insensible à la casse et pour éliminer une chaîne else-if potentiellement importante:
m.lower().endswith(('.png', '.jpg', '.jpeg'))
.split('.')[-1]
? Ou la répartition est-elle vraiment efficace?
os.path
fournit de nombreuses fonctions pour manipuler les chemins / noms de fichiers. ( docs )
os.path.splitext
prend un chemin et divise l'extension de fichier à partir de 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!
/.mp3
n'est donc pas considérée comme un fichier mp3. C'est cependant la manière dont un espace de premier plan doit être traité. Par exemple, ce .gitignore
n'est pas un format de fichier
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
un moyen simple pourrait être:
import os
if os.path.splitext(file)[1] == ".mp3":
# do something
os.path.splitext(file)
renverra un tuple avec deux valeurs (le nom de fichier sans extension + juste l'extension). Le deuxième index ([1]) vous donnera donc juste l'extension. Ce qui est cool, c'est que de cette façon, vous pouvez également accéder au nom de fichier assez facilement, si nécessaire!
Un vieux fil, mais qui peut aider les futurs lecteurs ...
J'éviter l' utilisation .lower () sur les noms de fichiers si pour aucune autre raison que de rendre votre code plus indépendant de la plate - forme. (Linux est sensible à la casse, .lower () sur un nom de fichier corrompra sûrement 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 fichiers sans extensions 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))
Production:
myfile.mp3 ==> mp3
myfile.MP3 ==> mp3
myfile.mP3 ==> mp3
myfile.mp4 ==> skip
myfile.flack ==> skip
myfile.FLAC ==> flac
myfile.Mov ==> skip
myfile.fLaC ==> flac
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
if (file.split(".")[1] == "mp3"):
print "its mp3"
elif (file.split(".")[1] == "flac"):
print "its flac"
else:
print "not compat"
.
s, par exemplesome.test.file.mp3
#!/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'
file='test.xlsx'
if file.endswith('.csv'):
print('file is CSV')
elif file.endswith('.xlsx'):
print('file is excel')
else:
print('none of them')