import os import json import sys def delete_duplicates(json_file="contacts_copy.json"): """ Удаляет дубликаты файлов, оставляя только первый файл в каждой группе """ print("Удаление дубликатов файлов") print("=" * 50) # Проверяем существование JSON файла if not os.path.exists(json_file): print(f"Ошибка: Файл {json_file} не найден!") print("Сначала запустите скрипт для создания contacts_copy.json") return try: # Читаем JSON файл with open(json_file, 'r', encoding='utf-8') as f: groups = json.load(f) except json.JSONDecodeError: print(f"Ошибка: Файл {json_file} содержит некорректный JSON!") return except Exception as e: print(f"Ошибка при чтении файла {json_file}: {e}") return if not isinstance(groups, list): print(f"Ошибка: {json_file} должен содержать список групп!") return # Статистика total_groups = len(groups) total_files_before = sum(len(group) for group in groups) files_to_keep = 0 files_to_delete = 0 deleted_files = [] kept_files = [] print(f"Загружено групп из {json_file}: {total_groups}") print(f"Всего файлов в группах: {total_files_before}") print("-" * 50) # Обрабатываем каждую группу for i, group in enumerate(groups, 1): if not isinstance(group, list): print(f"Предупреждение: Группа {i} не является списком, пропускаем") continue if len(group) == 0: continue # Пропускаем пустые группы # Оставляем первый файл, остальные помечаем на удаление file_to_keep = group[0] files_to_delete_in_group = group[1:] # Добавляем файлы в соответствующие списки kept_files.append(file_to_keep) files_to_keep += 1 # Удаляем файлы из группы (кроме первого) for file_to_delete in files_to_delete_in_group: # Проверяем существование файла if os.path.exists(file_to_delete): try: os.remove(file_to_delete) deleted_files.append(file_to_delete) files_to_delete += 1 print(f"✓ Удален: {file_to_delete}") except Exception as e: print(f"✗ Ошибка при удалении {file_to_delete}: {e}") else: print(f"✗ Файл не найден (уже удален?): {file_to_delete}") # Выводим итоговую статистику print("=" * 50) print("ИТОГИ УДАЛЕНИЯ:") print(f"Обработано групп: {total_groups}") print(f"Всего файлов было: {total_files_before}") print(f"Файлов сохранено: {files_to_keep}") print(f"Файлов удалено: {files_to_delete}") if files_to_delete > 0: print(f"\nСохраненные файлы ({len(kept_files)}):") for file in sorted(kept_files): print(f" {file}") print(f"\nУдаленные файлы ({len(deleted_files)}):") for file in sorted(deleted_files): print(f" {file}") # Сохраняем список удаленных файлов в файл with open("deleted_files.log", 'w', encoding='utf-8') as f: f.write("Удаленные файлы:\n") f.write("=" * 50 + "\n") for file in sorted(deleted_files): f.write(f"{file}\n") f.write(f"\nВсего удалено: {len(deleted_files)} файлов\n") print(f"\nСписок удаленных файлов сохранен в deleted_files.log") else: print("\nДубликатов для удаления не найдено!") print("=" * 50) def main(): # Можно указать другой файл через аргумент командной строки json_file = "contacts_copy.json" if len(sys.argv) > 1: json_file = sys.argv[1] # Подтверждение удаления print("ВНИМАНИЕ: Этот скрипт удалит файлы с вашего диска!") print("Убедитесь, что у вас есть резервная копия важных данных.") print("-" * 50) response = input("Продолжить удаление? (y/n): ").strip().lower() if response == 'y' or response == 'yes' or response == 'да': delete_duplicates(json_file) else: print("Удаление отменено.") if __name__ == "__main__": main()