Estoy trabajando en cierto programa donde necesito hacer cosas diferentes dependiendo de la extensión del archivo. ¿Podría usar esto?
if m == *.mp3
...
elif m == *.flac
...
Estoy trabajando en cierto programa donde necesito hacer cosas diferentes dependiendo de la extensión del archivo. ¿Podría usar esto?
if m == *.mp3
...
elif m == *.flac
...
Respuestas:
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 grande si no:
m.lower().endswith(('.png', '.jpg', '.jpeg'))
.split('.')[-1]
? ¿O es la partición realmente alta eficiencia?
os.path
proporciona muchas funciones para manipular rutas / nombres de archivo. ( documentos )
os.path.splitext
toma una ruta y divide la extensión del archivo desde el final.
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 es un mp3! folder1 / folder / soundfile.flac es un archivo flac!
/.mp3
lo que no se considera un archivo mp3. Sin embargo, esta es la forma en que se debe tratar un espacio principal. Por ejemplo, .gitignore
no es un formato de archivo
Mira el módulo fnmatch. Eso hará lo que intentas hacer.
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print file
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 del archivo sin extensión + solo la extensión). El segundo índice ([1]) le proporcionará 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.
Un hilo viejo, pero puede ayudar a futuros lectores ...
Me gustaría evitar el uso de .lower () en los nombres de archivo si no por otra razón que la de hacer que el código sea más independiente de la plataforma. (Linux es sensible a mayúsculas y minúsculas, .lower () en un nombre de archivo seguramente corromperá su lógica eventualmente ... 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
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"
.
some.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')