You can use os.walk(), glob.glob(), or pathlib.Path.rglob(). Each has different advantages for automation scripts.
# Using pathlib (recommended)
from pathlib import Path
def find_files_by_extension(directory, extension):
return list(Path(directory).rglob(f'*.{extension}'))
# Using glob
import glob
files = glob.glob('/path/**/*.py', recursive=True)
# Using os.walk
import os
def find_files_walk(directory, extension):
files = []
for root, dirs, filenames in os.walk(directory):
for filename in filenames:
if filename.endswith(f'.{extension}'):
files.append(os.path.join(root, filename))
return files
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.