Python поиск файлов по шаблону

Есть код

for root, dirs, files in os.walk("//")
    for file in files:
        if file in fnmatch.filter(files,"*"+word+"*"):print(os.path.join(root,file))

Код нормально находит файл по указанному шаблону. Вопрос сделать такой поиск по нескольким словам? Пример что бы 'кот','собака'


Ответы (2 шт):

Автор решения: Zhihar

что мешает в лоб забубенить?

for root, dirs, files in os.walk("//")
    for file in files:
        for word in words:
            if file in fnmatch.filter(files, f"*{word}*"):print(os.path.join(root,file))

ну или найти все файлы, а потом уже регулярными выражениями выбрать то, что вам нужно

→ Ссылка
Автор решения: MaxU

Я бы написал функцию для поиска по регулярным выражениям:

import re
from pathlib import Path

def glob_re(path, regex="", glob_mask="**/*", inverse=False):
    p = Path(path)
    if inverse:
        res = [str(f) for f in p.glob(glob_mask) if not re.search(regex, str(f))]
    else:
        res = [str(f) for f in p.glob(glob_mask) if re.search(regex, str(f))]
    return res

пример:

res = glob_re(r"/starting_path/to", regex="(?:кот|собака)")

PS по умолчанию используется маска glob_mask="**/*", благодаря которой поиск будет осуществляться рекурсивно во всех поддиректориях. Если искать нужно только в текущей директории, тогда надо явно указать glob_mask="*"

→ Ссылка