2009-08-13 10 views

Respuesta

16

Querrá usar os.walk que hará que sea trivial.

import os 

asps = [] 
for root, dirs, files in os.walk(r'C:\web'): 
    for file in files: 
     if file.endswith('.asp'): 
      asps.append(file) 
+1

O 'ASPs = [(archivo para archivo en archivos si file.endswith ('.asp')) para _, __, archivos en os.walk (path)] ', que creo que sería la forma" Pythonic "de hacerlo (aunque en realidad es una sintaxis un poco más corta para exactamente lo mismo) . –

+4

1 liners son agradables pero no son exactamente pitónicos en legibilidad. – Unknown

+0

Esto vuelve a mostrar los directorios, pero no almacena las rutas de los archivos. – hughdbrown

3

recorrer el árbol con os.walk y el contenido del filtro con glob:

import os 
import glob 

asps = [] 
for root, dirs, files in os.walk('/path/to/dir'): 
    asps += glob.glob(os.path.join(root, '*.asp')) 

o con fnmatch.filter:

import fnmatch 
for root, dirs, files in os.walk('/path/to/dir'): 
    asps += fnmatch.filter(files, '*.asp') 
+0

Me gusta el os.path.join(). Me imagino que OP encontrará que necesita una ruta completa a los archivos encontrados. – hughdbrown

+0

Cuando hice su segunda solución, solo busca en el mismo directorio repetidamente. Creo que necesita esto: >>> asps = [] >>> p = r'C: \ temp ' >>> para root, dirs, archivos en os.walk (p): ... asps + = fnmatch.filter ([os.path.join (root, file) para el archivo en archivos], "* .txt") – hughdbrown

+0

Ummm, no del todo bien. Tengo el mismo archivo en múltiples directorios en un directorio raíz. Parece que el mismo directorio buscó repetidamente pero no lo está. todavía sería mejor con la ruta adjunta, como en su primera solución. – hughdbrown

Cuestiones relacionadas