""" Модуль для поиска файлов формата .xlsx в директории """ import logging from pathlib import Path class FileFinderService: """Сервис для поиска и управления файлами .xlsx""" def __init__(self): """Инициализирует сервис поиска файлов.""" self.xlsx_files = [] logging.info("FileFinderService инициализирован.") def find_xlsx_files(self, directory_path, recursive=True): """ Ищет все файлы формата .xlsx в директории и сортирует их. Args: directory_path (str или Path): Путь к директории для поиска recursive (bool): Искать ли рекурсивно по подпапкам Returns: list: Список путей до файлов .xlsx в порядке возрастания """ try: dir_path = Path(directory_path) if not dir_path.exists(): logging.error(f"❌ Директория не найдена: {directory_path}") return [] if not dir_path.is_dir(): logging.error(f"❌ Это не директория: {directory_path}") return [] logging.info(f"🔍 Начинаю поиск .xlsx файлов в: {dir_path}") # Ищем все файлы .xlsx if recursive: xlsx_files = list(dir_path.glob('**/*.xlsx')) logging.info(" (поиск во всех подпапках)") else: xlsx_files = list(dir_path.glob('*.xlsx')) logging.info(" (только текущая папка)") # Сортируем в порядке возрастания по имени файла xlsx_files.sort(key=lambda x: x.name) # Сохраняем результаты self.xlsx_files = xlsx_files logging.info(f"✅ Найдено файлов .xlsx: {len(xlsx_files)}") # Логируем каждый найденный файл if xlsx_files: for idx, file_path in enumerate(xlsx_files, 1): logging.info(f" [{idx}] {file_path.name}") else: logging.warning("⚠️ Файлы .xlsx не найдены в указанной директории") return xlsx_files except Exception as e: logging.error(f"❌ Ошибка при поиске .xlsx файлов: {e}") return [] def get_file_paths(self): """Возвращает список сохраненных путей файлов.""" return self.xlsx_files def get_file_paths_as_strings(self): """Возвращает список путей в виде строк.""" return [str(file_path) for file_path in self.xlsx_files] def get_file_count(self): """Возвращает количество найденных файлов.""" return len(self.xlsx_files) def get_file_by_index(self, index): """Возвращает файл по индексу (0-based).""" try: if 0 <= index < len(self.xlsx_files): file_path = self.xlsx_files[index] logging.info(f"📄 Получен файл #{index + 1}: {file_path.name}") return file_path else: logging.warning(f"⚠️ Индекс {index} выходит за границы (всего: {len(self.xlsx_files)})") return None except Exception as e: logging.error(f"❌ Ошибка при получении файла по индексу: {e}") return None def clear(self): """Очищает список найденных файлов.""" self.xlsx_files = [] logging.info("🗑️ Список файлов очищен.")