递归选定级别的子目录

2024-09-28 22:23:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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,假设它在找到我选择的dir并继续前进后会中断,但我认为这没有帮助,因为它仍然需要遍历成千上万的子目录和文件。在

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


Tags: 文件path代码inre目录foros
1条回答
网友
1楼 · 发布于 2024-09-28 22:23:53

如果深度是固定的,使用glob是个好主意。根据thisSO post,可以使用glob设置遍历深度。在

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

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

相关问题 更多 >