2010-11-07 6 views
18

Estoy buscando una manera de hacer un os.walk() paseo no recursivo, al igual que os.listdir() funciona. Pero necesito regresar de la misma manera que regresa el os.walk(). ¿Alguna idea?Os.walk no recursivo()

Gracias de antemano.

Respuesta

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

Más simple de lo que podía pensar ... ¡Gracias! –

4

Mi solución un poco más definido en los parámetros sería la siguiente:

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

    //some fency code here using generated list 

Editar: correcciones, si/mientras cuestión. Gracias, @Dirk van Oosterbosch:}

+4

Esto solo funciona si hay ** un ** subdirectorio. Para subdirectorios múltiples use 'while len (dirs)> 0' en lugar de' if'. –

+0

@DirkvanOosterbosch: o incluso más simple: simplemente 'si no es recursivo: break' No relacionado: puede usar' del dirs [:] 'en lugar de' while dirs: dirs.pop() '. – jfs

+0

Usar 'dirs.clear()' es más idiomático. – ideasman42

0

bien lo que significaba Kamiccolo era más de acuerdo con esto:

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

Añadir un break después de los nombres de archivo de bucle:

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

Esto funciona porque (por defecto) os.walk primero enumera los archivos en la carpeta solicitada y luego va a las subcarpetas.