3

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

但这不符合特定需求。

有人可以帮助我,将不胜感激!

4

2 回答 2

3

我会使用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
于 2015-06-16T21:38:44.110 回答
2

您可以使用 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)
于 2015-06-16T22:08:01.577 回答