1

我有一个名为Forfun的主目录。在这个目录中,有 7-8 个子目录,分别为Test1Test2Test3等。请注意, Forfun中也有一些文件不是子目录。例如,Forfun中有一个 .txt 文件,与 Test1、Test2 子目录处于同一级别。

每个TestX子目录又分为 3 个子目录,即:输入结果参数

我希望能够列出特定文件夹的所有实例,例如输入

代码应该递归地遍历整个Forfun目录并列出它找到输入结果目录的所有位置。

我试过os.listdir这样使用:

path = '/myfiles/Forfun'
folders = [f for f in os.listdir(path) if f.endswith('inputs')]
folders 

但这会给我一个空列表。希望我清楚地解释了问题,感谢您的帮助。

4

2 回答 2

3

os.listdir()列出提供的目录中的所有文件和目录。正如您所经历的,它不执行递归。它停留在最初提供的目录的级别。

为了递归地遍历目录树并遍历某个目录级别以下的所有os.walk()文件和目录,您应该使用 Python 的:

import os

def listdirs(suffix):
    for dirname, dirnames, filenames in os.walk('.'):
        for subdirname in dirnames:
            subdirpath = os.path.join(dirname, subdirname)
            if subdirpath.endswith(suffix):
                yield subdirpath


if __name__ == "__main__":
    for d in listdirs('inputs'):
        print d

我已经建立了与您提出的相同的目录结构。这是上面代码的输出:

$ python test.py 
./Test1/inputs
./Test2/inputs
于 2012-05-21T12:30:17.103 回答
1

为了精确一点Jan-Philip的解决方案:

>>> import os
>>> for root, dirs, files in os.walk(path):
    if 'inputs' in dirs:
        print os.path.join(root, 'inputs')

这将列出所有出现的inputs子文件夹。

于 2012-05-21T12:37:17.020 回答