Нерекурсивный os.walk () - PullRequest
       17

Нерекурсивный os.walk ()

25 голосов
/ 07 ноября 2010

Я ищу способ сделать нерекурсивную os.walk() прогулку, как os.listdir() работает.Но мне нужно вернуть таким же образом, как возвращается os.walk().Есть идеи?

Заранее спасибо.

Ответы [ 4 ]

31 голосов
/ 07 ноября 2010
next(os.walk(...))
16 голосов
/ 31 октября 2016

Добавьте break после имени файла для цикла:

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

Это работает, потому что (по умолчанию) os.walk сначала перечисляет файлы в запрошенной папке, а затем переходит в подпапки.

6 голосов
/ 30 января 2013

Мое более параметризованное решение будет таким:

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

    //some fency code here using generated list

Редактировать: исправляет проблему if / whileСпасибо, @ Дирк ван Оостербош :}

1 голос
/ 15 ноября 2013

Ну, то, что имел в виду Камиколо, больше соответствовало этому:

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