将目录遍历到 Python 中的特定深度

Traverse directories to a specific depth in Python

例如,我想搜索和打印 c:// 下的目录,但只列出包含 SP30070156-1 的第一层和第二层。

在没有脚本 运行 的情况下使用 python 2 通过整个子目录(在我的情况下这么多,这将花费很长时间)来获得它的最有效方法是什么? =12=]

典型的目录名称如下:

Rooty Hill SP30068539-1 3RD Split Unit AC Project
Oxford Falls SP30064418-1 Upgrade SES MSB
Queanbeyan SP30066062-1 AC

您可以尝试创建一个基于os.walk() 的函数。像这样的事情应该让你开始:

import os

def walker(base_dir, level=1, string=None):
    results = []
    for root, dirs, files in os.walk(base_dir):
        _root = root.replace(base_dir + '\', '') #you may need to remove the "+ '\'"
    if _root.count('\') < level:
        if string is None:
            results.append(dirs)
        else:
            if string in dirs:
               results.append(dirs)
    return results

然后你可以用string='SP30070156-1'调用它,级别1然后级别2。

不过不确定它是否会比 40 秒更快。

这里是我用的代码,方法很快就列出来了,如果按关键字过滤就更快

import os


MAX_DEPTH = 1
#folders = ['U:\I-Project Works\PPM 20003171\PPM 11-12 NSW', 'U:\I-Project Works\PPM 20003171\PPM 11-12 QLD']
folders = ['U:\I-Project Works\PPM 20003171\PPM 11-12 NSW']
try:
    for stuff in folders:
        for root, dirs, files in os.walk(stuff, topdown=True):
            for dir in dirs:
                if "SP30070156-1" in dir:
                    sp_path = root + "\"+ dir
                    print(sp_path)

                    raise Found
            if root.count(os.sep) - stuff.count(os.sep) == MAX_DEPTH - 1:
                del dirs[:]

except:
    print "found"