Listar archivos

Chema Cortes py en ch3m4.org
Mie Abr 26 18:31:16 CEST 2006


Jose Luis Dominguez NONLILLY escribió:
> Hola a todos.
> 
> He realizado un programa para que me borre todos los archivos menos los 
> que tengan "*.cpp y *.h"
> El scrip  funciona pero no me acaba de gustar la solución que implementé.
> Para distinguir entre lo que son archivos y directororios he usado 
> os.stat() y luego miraba el campo que indica el tamaño.
> 
> Aquí está el código
> 
> [...]
> 
> Como se podría hacer una solución algo más profesional.

¿Has probado con 'os.walk'? Es muy sencillo de usar y diferencia, sin
más, entre ficheros y directorios. Para el problema de la extensión
puedes emplear 'os.path.splitext' (si fueran muchas extensiones entonces
quedaría mejor compilar una expresión regular con el módulo 're')

El código queda muy simple (y profesional):

import os

IGNORADOS = (".cpp", ".h", ".py")

def borrado(dirname):
  for root,dirs,files in os.walk(dirname):
    for fname in files:
      _,ext=os.path.splitext(fname)
      if ext not in IGNORADOS:
        os.remove(os.path.join(root,fname))



NOTAS:
- la constantes es mejor ponerlas en mayúsculas para resalten
- empieza a estilar ver el subrayado _ como nombre de las variables cuyo
valor no nos interesa ("dummy vars").
- os.walk() no modifica el CWD, por lo que no hace falta restaurarlo
(como hacía tu código)
- y sobre todo, ¡OJO! que no lo he probado


-- 
Chema Cortés (py en ch3m4.org)
"Proudly made on earth by a generic humanoid carbon unit"




Más información sobre la lista de distribución Python-es