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