Char contacts before duplicates

This commit is contained in:
sShemet
2026-02-05 21:10:16 +05:00
parent 8db81fd04d
commit 388c5eaad6
259 changed files with 468 additions and 2872 deletions

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