2009-08-13 11 views

risposta

16

Si vorrà utilizzare os.walk che lo renderà banale.

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 'ASP = [(per il file nel file se file.endswith ('.asp')) per _, __, file in os.walk (percorso)] ', che penso sarebbe il modo" Python "di farlo (anche se in realtà è solo una sintassi leggermente più breve per la stessa identica cosa) . –

+4

1 liner sono belli ma non sono esattamente leggibili in Pythonic. – Unknown

+0

Questo ricorre alle directory ma non memorizza i percorsi dei file. – hughdbrown

3

piedi l'albero con os.walk e contenuti 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

Come os.path.join(). Immagino che OP troverà che ha bisogno di un percorso completo per i file trovati. – hughdbrown

+0

Quando ho fatto la tua seconda soluzione, cerca la stessa directory ripetutamente. Penso che sia necessario: >>> asps = [] >>> p = r'C: \ temp ' >>> per root, dirs, file in os.walk (p): ... asps + = fnmatch.filter ([os.path.join (root, file) per file nei file], "* .txt") – hughdbrown

+0

Ummm, non proprio corretto. Ho lo stesso file in più directory in una directory radice. Sembra che la stessa directory sia stata cercata ripetutamente ma non lo è. sarebbe ancora meglio con il percorso allegato, come nella tua prima soluzione. – hughdbrown

Problemi correlati