Files
P2EP_Export/UnRLE/0864_Btl_CONTC/delete_dup.py
2025-12-14 03:07:25 +05:00

127 lines
5.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()