2010-11-07 117 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首先列出请求的文件夹中的文件,然后进入子文件夹。