22 lines
652 B
Python
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)
|