递归选定的子目录级别

Recurse through selected level of subdirectories

我是 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 仅递归选定的目录级别?或者以某种方式修剪我不想递归的那些?我在 for 循环中添加了 break 假设它会在找到我选择的目录并继续前进后中断,但我认为这没有帮助,因为它仍然必须经过数千个子目录和文件。

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

如果使用 glob 固定深度是个好主意。根据 this SO post 您可以使用 glob 设置遍历深度。

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

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