2010-11-07 16 views
18

Sto cercando un modo per fare una passeggiata os.walk() non ricorsiva, proprio come funziona os.listdir(). Ma ho bisogno di restituire allo stesso modo il os.walk() restituisce. Qualche idea?Os.walk non ricorsivo()

Grazie in anticipo.

risposta

24
next(os.walk(...)) 
+0

Più semplice di quanto potessi pensare ... Grazie! –

4

La mia soluzione un po 'più parametrizzato sarebbe questo:

for root, dirs, files in os.walk(path): 
    if not recursive: 
     while len(dirs) > 0: 
      dirs.pop() 

    //some fency code here using generated list 

Modifica: correzioni, se/mentre problema. Grazie, @Dirk van Oosterbosch:}

+4

Funziona solo se è presente una ** sottodirectory **. Per più sottodirectory usa 'while len (dirs)> 0' invece di' if'. –

+0

@DirkvanOosterbosch: o anche più semplice: solo 'se non ricorsivo: break' Non correlato: potresti usare' del dirs [:] 'invece di' while dirs: dirs.pop() '. – jfs

+0

Usa 'dirs.clear()' è più idiomatico. – ideasman42

0

Beh che Kamiccolo dire era più in linea con questo:

for str_dirname, lst_subdirs, lst_files in os.walk(str_path): 
    if not bol_recursive: 
      while len(lst_subdirs) > 0: 
       lst_subdirs.pop() 
4

Aggiungi un break dopo i nomi dei file per ciclo:

for root, dirs, filenames in os.walk(workdir): 
    for fileName in filenames: 
     print (fileName) 
    break #prevent decending into subfolders 

Questo funziona perché (per impostazione predefinita) os.walk prima elenca i file nella cartella richiesta e quindi entrano nelle sottocartelle.