递归扩展和搜索特定子目录的模式

Recursively expand and search pattern of specific subdirectories

我正在寻找一个选项来搜索 python 中的特定子目录。

例如这样的目录结构:

some_files/
     common/
     2009/
     2010/
     2011/
     ...

我只想在以2开头的子目录中搜索,所以它必须是'some_files/2*'之类的。我认为使用 glob.glob 和 os.walk() 一定是可能的,但我无法让它工作。

现在我使用:

files = [os.path.join(dirpath, f)
                for dirpath, dirnames, files in os.walk(d)
                for f in files if f.endswith(ext)]

但这不符合特定需求。

谁能帮帮我,将不胜感激!

我会这样做,使用 pathlib 现在是 Python3 std lib 的一部分):

from pathlib import Path

for subpath in Path().glob("2*):
    for file in subpath.glob("*.ext"):
        # ...

更新: pathlib 也可用于 Python 2.x(它已向后移植并发布到Python 包索引)。只需:

$ pip install pathlib

您可以将 glob 与 dirpath 结合使用来查找匹配的目录:

from glob import iglob
import os

files = []
ext = "py"
for dirpath, dirnames, file in os.walk(path):
    match = next(iglob(os.path.join(dirpath, "2*")),"")
    if match:
        files.extend(iglob(os.path.join(match,"*.{}".format(ext))))
print(files)

或者如果你真的想要一个列表组件:

files = [f for dirpath, dirnames, file in os.walk(path) for f in
         iglob(os.path.join(next(iglob(os.path.join(dirpath, "2*")),
                                 '\\'), "*.{}".format(ext)))]
print(files)