fix
This commit is contained in:
97
services/file_finder.py
Normal file
97
services/file_finder.py
Normal file
@@ -0,0 +1,97 @@
|
||||
"""
|
||||
Модуль для поиска файлов формата .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("🗑️ Список файлов очищен.")
|
||||
Reference in New Issue
Block a user