Дата: 2024-12-19
Задача: Группировка логов экспорта по умолчанию с опциональным подробным режимом
Статус: ✅ Завершено
Данные экспортированы в data/max_split\objects\objects_001.json
Данные экспортированы в data/max_split\objects\objects_002.json
Данные экспортированы в data/max_split\objects\objects_003.json
Данные экспортированы в data/max_split\objects\objects_004.json
Данные экспортированы в data/max_split\objects\objects_005.json
Данные экспортированы в data/max_split\objects\objects_006.json
Данные экспортированы в data/max_split\objects\objects_007.json
Данные экспортированы в data/max_split\objects\objects_008.json
Данные экспортированы в data/max_split\objects\objects_009.json
Данные экспортированы в data/max_split\objects\objects_010.json
...
Проблемы:
- ❌ Спам в выводе - сотни строк с экспортом каждого файла
- ❌ Сложность анализа - трудно понять общую картину
- ❌ Потеря важной информации - статистика скрыта в потоке текста
- ❌ Нет контроля - всегда показываются все файлы
📁 Экспортировано файлов: 57
📂 functions: 4 файлов
optimized_functions_001.json
optimized_functions_002.json
optimized_functions_003.json
functions_index.json
📂 methods: 4 файлов
optimized_methods_001.json
optimized_methods_002.json
optimized_methods_003.json
methods_index.json
📂 objects: 44 файлов
optimized_objects_001.json
optimized_objects_002.json
... (40 файлов) ...
optimized_objects_043.json
objects_index.json
Данные экспортированы в data/optimized_split\objects\optimized_objects_001.json
Данные экспортированы в data/optimized_split\objects\optimized_objects_002.json
Данные экспортированы в data/optimized_split\objects\optimized_objects_003.json
...
Преимущества:
- ✅ Компактный вывод по умолчанию - структурированная информация
- ✅ Группировка по категориям - легко найти нужные файлы
- ✅ Адаптивное отображение - детали для малых групп, статистика для больших
- ✅ Опциональный подробный режим -
--verboseдля отладки
def __init__(self, input_file: str, verbose: bool = False):
self.input_file = input_file
self.data = {}
self.verbose = verbose
self.exported_files = [] # Для группировки логовdef export_json(self, data: Dict[str, Any], filename: str) -> None:
try:
self.ensure_directory(filename)
with open(filename, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# Сохраняем информацию о файле для группировки
self.exported_files.append(filename)
# Выводим лог в зависимости от режима
if self.verbose:
print(f"Данные экспортированы в {filename}")
except Exception as e:
print(f"Ошибка при экспорте в JSON: {e}")def show_export_summary(self):
"""Показывает сводку экспортированных файлов"""
if not self.exported_files:
return
# Группируем файлы по категориям
categories = {}
for filename in self.exported_files:
parts = filename.split(os.sep)
if len(parts) >= 2:
category = parts[-2] # Предпоследняя часть пути
else:
category = "other"
if category not in categories:
categories[category] = []
categories[category].append(filename)
# Выводим сводку
print(f"📁 Экспортировано файлов: {len(self.exported_files)}")
for category, files in sorted(categories.items()):
print(f" 📂 {category}: {len(files)} файлов")
# Показываем детали для малых категорий
if len(files) <= 3:
for file in files:
filename = os.path.basename(file)
print(f" {filename}")
else:
# Показываем первые и последние файлы
for file in files[:2]:
filename = os.path.basename(file)
print(f" {filename}")
if len(files) > 4:
print(f" ... ({len(files)-4} файлов) ...")
for file in files[-2:]:
filename = os.path.basename(file)
print(f" {filename}")def __init__(self, input_file: str, max_file_size_kb: int = 50, max_items_per_file: int = 50, verbose: bool = False):
super().__init__(input_file, verbose)
self.max_file_size_kb = max_file_size_kb
self.max_items_per_file = max_items_per_filedef export_split(self, data: List[Dict], output_dir: str, prefix: str = ""):
# ... экспорт файлов ...
# Показываем сводку экспорта (если не verbose режим)
if not self.verbose:
self.show_export_summary()parser.add_argument("--verbose", "-v", action="store_true",
help="Подробный вывод (показывать каждый экспортированный файл)")def create_max_split_version(max_file_size_kb=50, max_items_per_file=50, verbose=False):
# ...
converter = MaxSplitConverter("data/1c_context.json", max_file_size_kb, max_items_per_file, verbose)
# ...
def create_optimized_split_version(max_file_size_kb=50, max_items_per_file=50, verbose=False):
# ...
converter = OptimizedSplitConverter("data/1c_context.json", max_file_size_kb, max_items_per_file, verbose)
# ...python run.py --mode optimized-split --max-file-size 50 --max-items-per-file 50Результат:
📁 Экспортировано файлов: 57
📂 functions: 4 файлов
optimized_functions_001.json
optimized_functions_002.json
optimized_functions_003.json
functions_index.json
📂 methods: 4 файлов
optimized_methods_001.json
optimized_methods_002.json
optimized_methods_003.json
methods_index.json
📂 objects: 44 файлов
optimized_objects_001.json
optimized_objects_002.json
... (40 файлов) ...
optimized_objects_043.json
objects_index.json
python run.py --mode optimized-split --max-file-size 50 --max-items-per-file 50 --verboseРезультат:
Данные экспортированы в data/optimized_split\objects\optimized_objects_001.json
Данные экспортированы в data/optimized_split\objects\optimized_objects_002.json
Данные экспортированы в data/optimized_split\objects\optimized_objects_003.json
...
- ≤3 файла в категории: Показываются все файлы
- >3 файла в категории: Показываются первые 2, "..." с количеством, последние 2
- Категории: Группировка по папкам (objects, functions, methods, etc.)
- Индексные файлы: Включаются в подсчет
Мало файлов (≤3):
📂 functions: 4 файлов
optimized_functions_001.json
optimized_functions_002.json
optimized_functions_003.json
functions_index.json
Много файлов (>3):
📂 objects: 44 файлов
optimized_objects_001.json
optimized_objects_002.json
... (40 файлов) ...
optimized_objects_043.json
objects_index.json
- ✅ Компактный вывод по умолчанию - вместо сотен строк структурированная информация
- ✅ Быстрый анализ - сразу видно количество файлов по категориям
- ✅ Логическая группировка - по категориям с адаптивным отображением
- ✅ Два режима - группированный по умолчанию, подробный по запросу
- ✅ Отладка -
--verboseдля детального анализа - ✅ Производительность - меньше вывода = быстрее выполнение
- ✅ Быстрое понимание - сразу понятно, что создалось
- ✅ Фокус на важном - внимание на структуре, а не на каждом файле
- ✅ Масштабируемость - работает с любым количеством файлов
# Добавить цветовую индикацию для разных категорий
print(f"\033[34m📂 {category}\033[0m: {len(files)} файлов")# Показывать прогресс экспорта
from tqdm import tqdm
for chunk in tqdm(chunks, desc="Экспорт файлов"):
# экспорт# Сохранение статистики экспорта в JSON
def export_statistics(self, output_file: str):
"""Экспортирует статистику экспорта в файл"""# Запрос подтверждения для больших экспортов
if len(items) > 1000 and not verbose:
confirm = input("Экспортировать много файлов? (y/n): ")Улучшения группировки логов успешно реализованы:
- ✅ Группированный вывод по умолчанию - компактный и информативный
- ✅ Подробный режим по запросу -
--verboseдля отладки - ✅ Адаптивное отображение - детали для малых групп, статистика для больших
- ✅ Обратная совместимость - все существующие команды работают
Результат: Теперь по умолчанию получаем структурированный отчет вместо спама, а при необходимости можем включить подробный режим для отладки.
Команды:
# Группированный режим (по умолчанию)
python run.py --mode optimized-split
# Подробный режим
python run.py --mode optimized-split --verbose