首页 > 解决方案 > 来自多个路径的 glob.glob

问题描述

我有以下代码

os.chdir("X:\data1")
for file in glob.glob("*.pdf"):

查找目录.pdf中的所有文件X:\data1\

我还想找到目录.txt中的所有文件Y:\data2\

我在源代码的多个地方都有这个片段,所以我只想做一点改变。

标签: pythonpython-3.xglob

解决方案


这样的事情会做吗?

import os
import glob


def ignore_case(pattern):
    return ''.join((f'[{c.lower()}{c.upper()}]' if c.isalpha() else c for c in pattern))


def multi_glob(patterns):
    for path, pattern in patterns:
        yield from glob.iglob(os.path.join(path, ignore_case(pattern)))


list(multi_glob((("X:\data1", "*.pdf"), ("Y:\data2", "*.txt"))))

本质上,os.chdir(path); glob.glob(pattern)您可以只做glob.glob(os.path.join(path, pattern)). 如果您希望这种情况发生在多个路径/模式组合中,您可以通过它们进行循环。最后,要获得不区分大小写的模式,只需将c模式的每个字母替换为[cC].


推荐阅读