Python代码在一个文件夹中搜索另一个文件夹

1 投票
4 回答
741 浏览
提问于 2025-04-18 01:49

我刚接触Python,想要在一个叫做“test”的文件夹里找一个名字像“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])

但这个方法只会在子文件夹里搜索。正如我说的,我对“test”文件夹的深度一无所知,它可能只有1层,也可能有10层。请给我一些建议。我现在用的是Python 2.6。

4 个回答

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))

希望这就是你想要的,不过有点不太清楚。

0

你可以使用 os.walk() 这个方法。

import os

folders = []

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

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

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

你可以用一些方法来处理路径,比如:os.path.abspath()、os.path.dirname()等等。

1

这件事其实很简单,只要你明白需要两个部分:

  1. 一个函数,用来递归地遍历一个文件夹。
  2. 一个函数,用来检查一个文件夹是否符合某个条件。

对于第一个部分:

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)

撰写回答