python - una - Comprobando la extensión de archivo
rutas de archivos en python (9)
Mira el módulo fnmatch. Eso hará lo que estás tratando de hacer.
import fnmatch
import os
for file in os.listdir(''.''):
if fnmatch.fnmatch(file, ''*.txt''):
print file
Estoy trabajando en un determinado programa y necesito que haga cosas diferentes si el archivo en cuestión es un archivo flac o un archivo mp3. ¿Podría usar esto?
if m == *.mp3 .... elif m == *.flac ....
No estoy seguro de si funcionará.
EDITAR: Cuando uso eso, me dice sintaxis inválida. ¿Entonces qué hago?
Un hilo viejo, pero puede ayudar a los futuros lectores ...
Evitaría usar .lower () en los nombres de archivo si no fuera por otra razón que para hacer que tu código sea más independiente de la plataforma. (Linux es un caso sensitivo, .lower () en un nombre de archivo seguramente corromperá tu lógica con el tiempo ... o peor, ¡un archivo importante!)
¿Por qué no usar re ? (Aunque para ser aún más robusto, debe verificar el encabezado del archivo mágico de cada archivo ... ¿Cómo verificar el tipo de archivos sin extensiones 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))
Salida:
myfile.mp3 ==> mp3
myfile.MP3 ==> mp3
myfile.mP3 ==> mp3
myfile.mp4 ==> skip
myfile.flack ==> skip
myfile.FLAC ==> flac
myfile.Mov ==> skip
myfile.fLaC ==> flac
o quizás:
from glob import glob
...
for files in glob(''path/*.mp3''):
do something
for files in glob(''path/*.flac''):
do something else
una manera fácil podría ser:
import os
if os.path.splitext(file)[1] == ".mp3":
# do something
os.path.splitext(file)
devolverá una tupla con dos valores (el nombre de archivo sin extensión + solo la extensión). El segundo índice ([1]) por lo tanto le dará solo la extensión. Lo bueno es que de esta manera también puedes acceder al nombre de archivo con bastante facilidad, si es necesario.
os.path
proporciona muchas funciones para manipular rutas / nombres de archivos. ( docs )
os.path.splitext
toma una ruta y divide la extensión del archivo desde el final de la misma.
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."
Da:
/folder/soundfile.mp3 is an mp3! folder1/folder/soundfile.flac is a flac file!
Suponiendo que m
es una cadena, puede usar endswith
:
if m.endswith(''.mp3''):
...
elif m.endswith(''.flac''):
...
Para ser insensible a mayúsculas y minúsculas, y para eliminar una cadena potencialmente potencialmente grande:
m.lower().endswith((''.png'', ''.jpg'', ''.jpeg''))
(Gracias a Wilhem Murdoch por la lista de args to endswith
)
#!/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''
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