Поиск файлов в папках и подпапках
Использование рекурсивных алгоритмов, таких как os.walk в Python, позволяет эффективно обходить директории и поддиректории, обеспечивая гибкость в фильтрации файлов по различным критериям

Функция сканирования:
Параметры:
• directory: строка, указывающая путь к директории, в которой будет происходить поиск.
• pattern: строка (по умолчанию '*'), указывающая шаблон для фильтрации имен файлов. Звездочка (*) означает, что будут выбраны все файлы.
def scan_directory(directory, pattern='*'):
file_list = []
# Проходим по всем папкам и файлам в указанной директории
for root, dirs, files in os.walk(directory):
for file in fnmatch.filter(files, pattern):
# Формируем полный путь к файлу
full_path = os.path.join(root, file)
# Добавляем в список
file_list.append(full_path)
return file_list
Логика работы функции:
1. Инициализация списка:
file_list = []
Создается пустой список file_list, который будет использоваться для хранения полных путей к найденным файлам.
2. Проход по директориям:
for root, dirs, files in os.walk(directory):
Используется функция os.walk, которая рекурсивно обходит все подкаталоги и файлы в указанной директории. Она возвращает кортежи из трех элементов:
• root: текущая директория.
• dirs: список подкаталогов в текущей директории.
• files: список файлов в текущей директории.
3. Фильтрация файлов по шаблону:
for file in fnmatch.filter(files, pattern):
Здесь используется функция fnmatch.filter, которая фильтрует список файлов (files) на основе заданного шаблона (pattern). Например, если шаблон — это *.txt, то будут выбраны только файлы с расширением .txt.
4. Формирование полного пути к файлу:
full_path = os.path.join(root, file)
Для каждого найденного файла создается его полный путь с помощью функции os.path.join, которая корректно объединяет директорию (root) и имя файла (file).
5. Добавление полного пути в список:
file_list.append(full_path)
Полный путь к файлу добавляется в список file_list.
6. Возврат результата:
return file_list
После завершения обхода всех директорий функция возвращает список всех найденных файлов, соответствующих заданному шаблону.
Простой пример использования:
import os
import fnmatch
def scan_directory(directory, pattern='*'):
file_list = []
# Проходим по всем папкам и файлам в указанной директории
for root, dirs, files in os.walk(directory):
for file in fnmatch.filter(files, pattern):
# Формируем полный путь к файлу
full_path = os.path.join(root, file)
# Добавляем в список
file_list.append(full_path)
return file_list
# Пример использования
directory_to_scan = 'путь к папке' # Замените на путь к вашей директории
file_pattern = '*.png' # Замените на нужную маску, например, '*.txt' для текстовых файлов
files = scan_directory(directory_to_scan, file_pattern)
# Выводим список файлов
for f in files:
print(f)
Дальше уже с каждым файлом можно осуществлять всякие всячины.