Expresion regular con glob
Chema Cortés
py en ch3m4.org
Mie Mar 1 03:23:24 CET 2006
El Martes, 28 de Febrero de 2006 23:32, Alberto Garcia escribió:
> Estoy asignando a una variable todos los archivos JPG, PNG y GIF de un
> directorio.
> la asigno tal que asi :
> origenes.extend(glob.glob(origen+'/*[.jpg|.png|.gif]'))
>
> No hay manera, si meto en la carpeta "origen" un bmp, tambien me lo coge!
> ¿Donde he metido la pata?
No pasas bien la expresión de búsqueda. Los corchetes sólo sirven para dar
rangos de caracteres. Tu expresión equivale a: origen+'/*[.jpgnif|]', razón
por la que te coge..(perdón :-S)..pilla los bmp por acabar su nombre en p
Para solucionarlo, podrías realizar tres búsquedas, una por cada tipo de
fichero.
> Por otro lado, cual sería la manera mas "elegante" de hacer esa asignación
> de forma recursiva, es decir, que asigne a "origenes" todos los JPG, PNG y
> GIF en la carpeta indicada y sus hijas....
La solución elegante sería con os.walk(), algo tal que así:
import os
import fnmatch
origenes=[]
for root,dirs,files in os.walk(origen):
for pat in ('*.jpg','*.png','*.gif'):
origenes+=[os.path.join(root,n) for n in fnmatch.filter(files,pat)]
Más información sobre la lista de distribución Python-es