2010-11-07 113 views
18

我正在尋找一種方式來做非遞歸的os.walk()走,就像os.listdir()的作品。但我需要以os.walk()返回的相同方式返回。任何想法?非遞歸os.walk()

預先感謝您。

回答

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

比我想象的還要簡單...謝謝! – 2010-11-07 12:14:35

4

我多一點parametrised的解決辦法是這樣的:

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

    //some fency code here using generated list 

編輯:修復,如果/當問題。謝謝,@Dirk van Oosterbosch:}

+4

這隻適用於有** 1 **子目錄的情況。對於多個子目錄,使用'while len(dirs)> 0'而不是'if'。 – 2013-04-23 19:35:55

+0

@DirkvanOosterbosch:或者更簡單:只要'如果不遞歸:break'不相關:你可以使用'del dirs [:]'而不是'dirs:dirs.pop()'。 – jfs 2016-07-05 18:02:18

+0

使用'dirs.clear()'更加地道。 – ideasman42 2017-11-18 06:58:24

0

那麼什麼Kamiccolo的意思是更符合這一點:

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

添加break文件名的for循環後:

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

這工作,因爲(默認) os.walk首先列出請求的文件夾中的文件,然後進入子文件夾。