98 lines
4.2 KiB
Python
98 lines
4.2 KiB
Python
"""
|
|
Модуль для поиска файлов формата .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("🗑️ Список файлов очищен.")
|