UTop/src/core/desktop_parsing/file_finder.py

22 lines
652 B
Python

# Python imports
import os
from fnmatch import fnmatch
from typing import Callable, Generator
# Lib imports
# Application imports
def find_files(directory: str, pattern: str = None, filter_fn: Callable = None) -> Generator[str, None, None]:
"""
Search files in `directory`
`filter_fn` takes two arguments: directory, filename.
If return value is False, file will be ignored
"""
for root, _, files in os.walk(directory):
for basename in files:
if (not pattern or fnmatch(basename, pattern)) and (not filter_fn or filter_fn(root, basename)):
yield os.path.join(root, basename)