Скрипт принимает .xlsx или .csv с колонками Имя, Телефон, Дата заявки, Источник и создаёт два результата в формате XLSX или CSV. Рекомендуется XLSX: в нём телефоны гарантированно остаются текстом со знаком +, настроены фильтры, ширина колонок и закрепление заголовка.
Требуется Python 3.10 или новее. Внешние библиотеки не нужны.
python clean_leads.py "C:\\path\\to\\input.xlsx" "C:\\path\\to\\clean_leads.xlsx" "C:\\path\\to\\problem_leads.xlsx"Скрипт:
- Приводит российские телефоны к виду
+7XXXXXXXXXX; неподходящие значения отмечает как «нет телефона». - Преобразует полные даты в
YYYY-MM-DD, включая распространённые числовые, Excel-форматы и даты с русским названием месяца. Неоднозначные, неполные и нераспознаваемые даты считаются проблемными — скрипт их не угадывает. - Убирает лишние пробелы в имени и приводит слова к аккуратному регистру.
- Убирает повторы по нормализованному телефону, сохраняя первую корректную запись.
- Выносит строки без имени, телефона или корректной даты в отдельный файл. В нём сохраняются номер строки, причина, все исходные значения и доступные нормализованные значения.
Скрипт обработал 36 исходных строк: в чистом результате 21 уникальная корректная заявка, в списке проблем — 6 строк, удалено 9 дублей. Телефоны в чистом файле имеют ровно формат +7 и 10 цифр; даты соответствуют YYYY-MM-DD; одинаковые телефоны не повторяются. Исходные значения всех проблемных строк сохранены.
python -m unittest -v test_clean_leads.pyТесты проверяют телефоны, имена, поддерживаемые даты, отказ от угадывания неоднозначных дат, сохранение исходных проблемных значений, удаление дублей и повторное чтение созданного XLSX.
- Разбил задачу на чтение, нормализацию, валидацию, дедупликацию и экспорт.
- Для телефонов применил правило
+7и десять цифр после него. - Для дат добавил распространённые числовые и русскоязычные форматы.
- Для разработки использовал Codex: он помог структурировать правила и сформировать скрипт.
- Запустил скрипт на приложенной книге и сверил количество строк на каждом этапе.
- Вручную просмотрел все строки из списка проблем и автоматически проверил телефоны, даты и уникальность номеров.
- Решение не привязано к конкретным 36 строкам и повторно обрабатывает файлы той же структуры.