49 votes

Os.walk non récidivant ()

Je cherche un moyen de faire une marche non récursive os.walk(), tout comme os.listdir() fonctionne. Mais je dois retourner de la même manière les rendements de os.walk(). Une idée ?

Merci d'avance.

58voto

Alecz Points 33

Ajouter un break après les noms de fichiers pour la boucle :

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

Cela fonctionne parce que (par défaut) os.walk répertorie d'abord les fichiers dans le dossier demandé, puis va dans les sous-dossiers.

45voto

Ignacio Vazquez-Abrams Points 312628
next(os.walk(...))

6voto

Kamiccolo Points 1568

Ma solution un peu plus paramétrée serait la suivante :

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

    //some fency code here using generated list

Éditer : correctifs, si/pendant le problème. Merci, @Dirk van Oosterbosch :}

1voto

Sanders Points 11

Eh bien, ce que Kamiccolo voulait dire était plus conforme à ceci :

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

1voto

gerardw Points 330

Vider la liste des répertoires

for r, dirs, f in os.walk('/tmp/d'):
    del dirs[:]
    print(f)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X