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

时间:2015-06-16 21:35:02

标签: python path filepath subdirectory wildcard-expansion

我正在寻找一个在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)]

但这不符合特定需求。

有人可以帮助我,非常感谢!

2 个答案:

答案 0 :(得分:3)

我会这样使用pathlib现在是Python3标准库的一部分):

from pathlib import Path

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

更新: pathlib也可用于Python 2.x(它已反向移植并发布到Python Package Index )。简单地:

$ pip install pathlib

答案 1 :(得分:2)

您可以使用带dirpath的glob来查找匹配的目录:

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)

或者,如果你真的想要一个列表comp:

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)