contacts battle works...
This commit is contained in:
127
UnRLE/0864_DemnCONTC/delete_dup.py
Normal file
127
UnRLE/0864_DemnCONTC/delete_dup.py
Normal file
@@ -0,0 +1,127 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user