通过选定级别的子目录进行递归

时间:2015-06-18 06:52:43

标签: python traversal subdirectory

我是python的新手。我有以下代码,通过将选定的目录检索到列表中,可以很好地工作。但是因为有很多子目录和文件,所以与我升级它的Perl代码相比,代码相当慢。

using re
using os

foundarr = []
allpaths = ["X:\\Storage", "Y:\\Storage"]

for path in allpaths:
    for root, dirs, files in os.walk(path):
        for dir in dirs:
            if re.match("[DILMPY]\d{8}", dir):
                foundarr.append(os.path.join(root, dir))
                break

我的问题:有没有办法只使用os.walk通过一个选定级别的目录进行递归?或者以某种方式修剪我不想通过的那些?我在break循环中添加了for,假设它在找到我选择的目录后会中断并继续前进,但我不认为这有帮助,因为它仍然必须通过数千个子目录和文件。

在Perl代码中,一个简单的$File::Find::prune = 1 if /[DILMPY]\d{8}$/;阻止编译器通过其余的子目录和文件进行递归。

1 个答案:

答案 0 :(得分:3)

如果使用glob修正深度是一个好主意。根据{{​​3}} SO帖子,您可以使用glob设置遍历的深度。

import glob
import os.path
depth2 = glob.glob('*/*')
depth2 = filter(lambda f: os.path.isdir(f), depth2)

这将列出深度为2的所有子目录。