ver una rutas manejo listar leer gestion directorio carpetas carpeta archivos administracion python file-extension

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