用于在另一个文件夹中搜索文件夹(而不是文件)的Python代码

时间:2014-04-08 06:30:55

标签: python unix

我是python的新手,我需要搜索一个名称为:vvl * cpp的文件夹,并且始终存在于名为test的目录中。但问题是测试目录的深度尚不清楚。

我试过了:

dir_name=glob.glob('./[a-z,_]*/test/vvl*cpp')
    file_dict={}
    for i in dir_name:
        name=re.compile(r"\.\/[a-z,_]*\/test\/vvl_")
        file_name=name.sub("",i)
        file_dict[file_name]=i

for key in sorted(file_dict.iterkeys()):
    print "%s: %s" % (key, file_dict[key])

但它只搜索子目录,但正如我所提到的,我不知道测试目录的深度。它可能是1它可能是10.请建议我一些出路。我正在使用python2.6

4 个答案:

答案 0 :(得分:1)

如果您认为需要两个组件,这很简单:

  1. 以递归方式遍历目录的函数。
  2. 检查目录是否匹配的函数。
  3. 第一个:

    def walk_tree(path):
        for root, dirs, files in os.walk(path):
            for dir in dirs:
                yield root, dir
    

    对于第二个:

    def is_a_match(dirparent, dirname):
        return os.path.basename(dirparent) == "test" and \
        dirname.startswith("vvl") and dirname.endswith("cpp")
    

    现在把它们放在一起:

    def iter_targets(path):
        for dirparent, dirname in walk_tree(path):
            if is_a_match(dirparent, dirname):
                yield os.path.join(dirparent, dirname)
    

答案 1 :(得分:0)

我喜欢这段代码中的逻辑:

for myDir, myDirs, myFilenames in os.walk(myPath):
    print type(myDir), myDir
    print type(myDirs), myDirs
    print type(myFilenames), myFilenames

您可以使用os.path方法来修复其余部分,例如:os.path.abspath(),os.path.dirname()等

答案 2 :(得分:0)

您可以使用os.walk()方法。

import os

folders = []

for path, dirs, files in os.walk(starting_path):
    folders.append(path)
    print path

答案 3 :(得分:0)

我会这样做 - 用os.walk抓取树,用lambda检查你的情况并用列表理解来累积匹配:

cond = lambda x, y: os.path.basename(x) == 'test' and 
                    y.startswith('vvl') and y.endswith('cpp')
matches = (os.path.join(r, d) for r, d, f in os.walk(tree) if cond(r, d))

希望这就是你的意思,有点不清楚。