Как Python-скрипт спас ситуацию за 3 часа
Есть предложения, которые я предлагаю внедрить коллегам для решения их задач как аналитик.
Недавно был случай, коллеги готовили данные для закрытия проекта. Объем был большим, сотрудники работали и в будни и выходные. Чтобы помочь им, я предложила массово автоматически сверить данные и, если необходимо, заменить значения на правильные.Файлов Excel много, свыше 350.
Сами файлы находятся в корпоративном облаке. Другие файлы, с которыми предыдущие надо сверить, - в общей папке на сервере. Папка большая, рабочая, с историей накопленных файлов свыше 3-х лет. В ней больше 20 человек пользователей, и структура формировалась не по заранее придуманной архитектуре (потому что ее еще не было), а по приблизительной...
Файлы из облака структурно были одинаковые, но количество строк в каждом кардинально менялось, от единиц, до тысяч строк.
На уровне одного файла задача довольно простая: открыть Excel из облака, открыть соответствующий Excel с сервера, сопоставить строки по определённому ключу и проверить, совпадают ли значения в нужном столбце.
Сложность определялась тем, что не нужно было делать замену всех данных, сверить нужно было только определенный столбец по ключу из каждой строки.
Если не совпадают - заменить значение в файле из облака. Пересохранить, загрузить с датой изменения, чтобы можно было отличить обновленный файл. Повторить это нужно примерно 350 раз. Коллеги оценили ручную обработку в две-три недели. Мне нужно было помочь сделать быстрее.
Поэтому я написала Python-скрипт. Он берёт файлы из облака и для каждого определяет, какой источник нужно использовать для сверки. Затем ищет этот источник в общей папке на сервере, читает данные, сопоставляет строки, проверяет нужное значение и при необходимости вносит изменения. После этого готовый файл возвращается в облако с датой, в папку созданную скриптом.
При этом мне не хотелось делать автоматизацию по принципу «нашли отличие - переписали всё подряд». Меняется только то значение, которое действительно отличается от источника. Если изменений нет, файл всё равно сохраняется в результат - просто без изменений. Если источник не найден, файл не ломается и не исчезает где-то по дороге: он сохраняется как есть, а ситуация фиксируется отдельно.
Отдельно скрипт ведёт реестр обработки (вносит каждый файл и что было изменено). Поэтому после прогона можно увидеть не только итоговые файлы, но и что произошло с каждым исходным: был ли найден источник, были ли замены, сколько именно, куда загрузился результат.
Если файлы в облаке пересохраняются пользователем, то уже обработанные файлы при следующем запуске повторно не прогоняются. Весь процесс, который изначально оценивался в 2–3 недели, уложился примерно в 3 часа. И в этой истории мне нравится именно это соотношение. Не потому, что Python каким-то магическим образом решил задачу.
Просто вместо сотен одинаковых действий появился один процесс, который можно запустить и дождаться результата. А дальше остаётся самое человеческое - посмотреть, что получилось.
Хаос в файлах — не приговор. Даже в папке, которая росла годами по обстоятельствам, можно навести порядок на уровне процесса.
Если у вас похожая ситуация — хаос в файлах, прошедший дедлайн, рутина, которую вроде можно автоматизировать, но страшно, — начинать стоит не с идеальной архитектуры, а с одного процесса, который можно запустить и посмотреть на результат. Иногда этого достаточно, чтобы сэкономить три недели.