Автоматизация рутины на Python: что реально автоматизировать
Короткий ответ: на Python перекладывай то, что повторяется по чётким правилам - файлы, таблицы, парсинг, рассылки, PDF. Смысловые задачи вроде «понять, о чём этот текст» отдавай нейросети. Стыковку готовых сервисов между собой удобнее собирать в n8n. Ниже - как я пришёл к такому разделению, где сам ошибался и как выбирать инструмент, чтобы не тащить всё в один.
Три раза за месяц я вручную сводил три выгрузки в один отчёт: открыл файл, скопировал колонку, посчитал сумму, перешёл к следующему, свёл в четвёртую таблицу, отправил. На это уходил почти весь вечер пятницы, и ровно столько же уходило в следующую пятницу. Когда я начал перекладывать эту возню на скрипты, обнаружилось кое-что помимо потерянных часов: за весь вечер я не принял ни одного решения, только повторял руками один и тот же алгоритм.
Логика тут старая. Эл Свейгарт вынес её прямо в заголовок книги «Automate the Boring Stuff with Python»: заметил скучное повторение - отдал скрипту. За годы с выхода книги Python перестал быть единственным ответом, потому что часть таких задач теперь закрывают нейросети и no-code-конструкторы. Выбор инструмента из-за этого превратился в отдельный навык, которому книга не учит.
Что Python автоматизирует лучше всего?
Python силён там, где правил много, а простора для трактовки нет. Скрипт не устаёт к пятисотой строке, не пропускает файл из-за того, что его отвлёк звонок, и выдаёт одинаковый результат на одинаковых данных.
- Файлы и папки. Массовое переименование, раскладка по датам, поиск дублей, разбор архивов, чистка старых версий. Модули
pathlibиshutilиз стандартной библиотеки покрывают почти всё: обойти дерево каталогов, проверить расширение, сравнить хеши двух файлов, переложить в нужную папку. Фотограф раскладывает съёмки по датам съёмки, а не по дате копирования. Бухгалтерия приводит акты к шаблону «дата_контрагент_сумма», чтобы поиск по папке работал. Получасовая возня превращается в секунду работы скрипта. - Таблицы и отчёты. Собрать выгрузки из нескольких Excel или CSV в один свод, посчитать метрики, отфильтровать, выгрузить обратно. Библиотека
pandasжуёт такие таблицы, не давясь:read_excelчитает файл,mergeсклеивает по ключу,groupbyсчитает срезы,to_excelвозвращает результат в привычном виде. Там, где раньше стояли громоздкие макросы, часто хватает пары десятков строк (макросы, VBA и нейросети я разбирал отдельно). - Парсинг сайтов. Цены конкурентов, вакансии, объявления, расписания. Связка
requestsиBeautifulSoupберёт простые страницы,playwrightподключают, когда содержимое дорисовывает JavaScript. Перед запуском загляни в robots.txt и пользовательское соглашение сайта, поставь паузу между запросами и не пытайся выкачать всё за минуту: вежливый парсер живёт дольше агрессивного. - Рассылки и уведомления. Письма по списку через
smtplib, сообщение в Telegram через Bot API при наступлении события, напоминание по расписанию, отправка отчёта в чат отдела каждое утро понедельника. - PDF и документы. Вытащить текст из сотни PDF через
pdfplumber, разбить один файл на страницы, собрать пачку договоров из шаблона Word с подстановкой реквизитов. Юристу это экономит день на каждой сделке средней сложности. - Работа с API. Выгрузить сделки из CRM, забрать статистику рекламной системы, положить данные в базу. Почти у любого сервиса есть документированный интерфейс, а
requestsумеет ходить в него тремя строками.
Проверь себя одной фразой: если задача укладывается в «для каждого X сделай Y по правилу Z», это работа для кода. Если внутри прячется «ну тут по ситуации» - чистого Python уже мало, понадобится модель или живой человек.
Как выглядит первый шаг?
Не садись писать «систему». Возьми одну задачу, которую делаешь каждую неделю руками, - ту самую пятничную сводку из трёх файлов. Если непонятно, за что хвататься первым, помогает разбор с каких задач начинать автоматизацию рутины: там задачи отсортированы по соотношению «сколько сэкономишь / сколько провозишься».
- Опиши вслух, что делаешь по шагам. Буквально: открываю файл
sales_july.xlsx, беру колонку «Сумма», складываю строки со второй по последнюю, записываю итог в отдельную таблицу напротив названия месяца. - Дай эти шаги модели: «Напиши Python-скрипт, который делает вот это. Объясни каждую строку. Файлы лежат в такой-то папке, формат такой-то, колонки называются так-то». Чем подробнее описан формат данных, тем меньше правок потом. Для генерации кода я обычно беру Claude, но подойдёт и другая модель - сравнение есть в материале Claude или ChatGPT: что выбрать под задачу, а вопросы с оплатой и доступом разобраны в инструкции по работе с Claude из России.
- Запусти на копии данных, не на боевых. Сверь результат руками ровно один раз, полностью, до последней цифры.
- Сломалось - покажи модели текст ошибки целиком, вместе с последними строками кода, и спроси, как починить. Не пересказывай ошибку своими словами, копируй как есть.
Отдельно про пункт с описанием формата. Модель не видит твои файлы и додумывает структуру: считает, что заголовок в первой строке, что даты записаны одинаково, что пустых ячеек нет. Приложи к запросу первые десять строк файла в текстовом виде, и половина будущих ошибок исчезнет ещё до запуска. Тот же принцип работает шире - чем больше рабочего контекста получает модель, тем меньше приходится переделывать; про это есть отдельный разбор о том, как собрать базу знаний для нейросети.
Разбор случая: сводка из трёх выгрузок
Мой первый такой скрипт сложился минут за двадцать и посчитал не то. Я неточно описал правило: сказал «сложи колонку», а внизу выгрузки стояла строка «Итого», и она сложилась вместе со всеми остальными. Сумма получилась ровно вдвое больше настоящей, выглядела правдоподобно, и я почти отправил её дальше. Спасло то, что я из осторожности пересчитал на калькуляторе.
Служебную строку я в итоге отсекал по признаку пустой даты: у «Итого» дата не проставлена, у обычной продажи она есть всегда. Фильтр df = df[df['дата'].notna()] убрал её сразу из всех трёх выгрузок. Вариант «отрезать последнюю строку файла» я отбросил после проверки: в одной выгрузке итог стоял сверху, а в другой за ним шли ещё две пустые строки от старого шаблона.
Дальше вылезли ещё три вещи, и каждая типична настолько, что их стоит ждать заранее.
Первая - кодировка. Выгрузка из старой учётной системы приехала в cp1251, pandas по умолчанию читает utf-8, и вместо названий контрагентов в таблице оказались вопросительные знаки. Лечится параметром encoding='cp1251' в одну строку, но пока не знаешь, выглядит как поломка всего.
Вторая - даты. В одном файле стояло 01.08.2026, в другом 2026-08-01, в третьем дата вообще приехала числом, потому что Excel хранит её как количество дней от 1900 года. Пока не привёл всё к одному типу через pd.to_datetime, группировка по месяцам давала кашу из трёх разных августов.
Третья - названия колонок. «Сумма», «Сумма ”, «сумма» и «Сумма, руб.» для скрипта четыре разных колонки. Я добавил в начало нормализацию заголовков: убрать пробелы по краям, привести к нижнему регистру, сопоставить со словарём синонимов. Двадцать строк кода, зато файл от нового поставщика теперь подхватывается без переделки.
Итог: сама логика расчёта заняла строк пятнадцать, а обвязка вокруг грязных данных - раза в три больше. Так бывает почти всегда, и это нормальная пропорция для рабочего скрипта. Первый прогон сверяй с ручным расчётом полностью, а дальше, когда цифры сошлись, можно доверять и проверять выборочно.
Разбираться во всём этом в одиночку необязательно. У ИИмперии есть бесплатное обучение, где весь путь показан на живых примерах: от выбора первой задачи до скрипта, который каждое утро сам кладёт отчёт в рабочий чат. Посмотреть бесплатное обучение стоит до того, как ты потратишь три вечера на грабли, по которым уже прошли до тебя.
Когда брать нейросеть вместо Python?
Модель берёт задачи, где нужно понять содержание. Python выполняет инструкцию буквально и не вникает в смысл текста, тогда как нейросеть читает тональность отзыва, суть письма, тему транскрипта, определяет, что на фотографии.
| Задача | Инструмент |
|---|---|
| Разобрать 200 отзывов на «доволен / недоволен / за что» | Нейросеть |
| Посчитать средний чек по 200 строкам таблицы | Python |
| Вытащить из письма имя, сумму и дату | Нейросеть или Python + нейросеть |
| Переименовать 200 файлов по дате создания | Python |
| Сделать краткое саммари 50 транскриптов созвонов | Нейросеть |
| Найти в папке все файлы тяжелее 100 МБ | Python |
| Разложить входящие заявки по темам обращений | Нейросеть |
| Сверить два прайса и найти расхождения по артикулам | Python |
Граница проходит по одному признаку: можешь ли ты записать правило так, чтобы его выполнил человек, ни разу не подумав. «Возьми колонку C, сложи» - можешь. «Пойми, доволен ли клиент» - нет, потому что «спасибо, конечно, но осадочек остался» формально содержит благодарность.
Отдельная категория задач - аналитическая: цифры уже посчитаны, требуется объяснение, почему они получились такими. Здесь модель работает как собеседник, которому ты подсовываешь готовую таблицу и просишь найти аномалии. Какие вопросы ей задавать, чтобы получить пользу, а не пересказ таблицы, разложено в материале про нейросети для бизнес-аналитики.
Как связать код и модель в одну цепочку?
Выбирать из двух вариантов приходится редко. Чаще получается конвейер: скрипт выгружает новые отзывы из базы, отправляет их модели на разметку по тональности, забирает размеченный результат, складывает обратно в таблицу и рисует сводку по неделям. Механику тянет код, понимание - модель.
Несколько вещей, которые я усвоил на таких цепочках.
Проси структурированный ответ. Если модель отвечает свободным текстом, разбирать его придётся регулярными выражениями, и это ад. Формулируй так: «Верни JSON вида {"tone": "positive|negative|neutral", "reason": "..."}, без пояснений вокруг». Дальше скрипт парсит ответ штатным json.loads и падает громко, если формат нарушен.
Отправляй пачками, но не всё сразу. Двести отзывов по одному запросу на каждый - это двести оплаченных обращений и долгое ожидание. Двести отзывов одним запросом модель начнёт путать между собой ближе к концу списка. Практика подсказывает середину: десять-двадцать элементов за раз, с явной нумерацией в запросе и требованием вернуть массив той же длины.
Проверяй длину и типы. Модель иногда возвращает девятнадцать элементов вместо двадцати. Скрипт должен это заметить и переспросить, а не молча положить в отчёт сдвинутые данные.
Сохраняй сырые ответы модели. Складывай ответ целиком до разбора, вместе с отправленным запросом. Когда через неделю в отчёте всплывёт странная метка, только этот файл покажет, придумала ли её модель или скрипт неправильно разложил результат по колонкам.
Помни про недетерминированность. Прогонишь один и тот же список дважды - формулировки причин слегка разойдутся, иногда разойдутся и метки у пограничных случаев. Для смыслового разбора это допустимо, для расчёта денег - нет. Расчёты держи на Python, смысловой слой поручай модели.
Считай стоимость заранее. Разметка тысячи коротких отзывов через API стоит копейки, а вот прогон сотни часовых транскриптов уже ощутим по бюджету. Прикинь объём текста до запуска, чтобы не удивиться счёту в конце месяца.
Когда таких цепочек становится несколько и они начинают дёргать друг друга, скрипт перерастает в агента - с памятью, инструментами и правом самому решать порядок шагов. Что это меняет на практике, разобрано в статье про ИИ-агентов для бизнеса.
Когда n8n удобнее кода?
n8n выигрывает, когда задача сводится к стыковке готовых сервисов. Сам n8n, как и родственные ему Make и Zapier, работает визуальным конструктором связок: соединяешь блоки «пришло письмо» → «создай задачу» → «уведоми в Telegram», кода нет, всё собирается кликами. Если раньше не работал с такими конструкторами, начни с пошагового разбора как освоить n8n с нуля.
Вот те самые стыковки:
- Новая заявка в форме → строка в таблице → сообщение в чат отдела продаж.
- Оплата в кассе → письмо клиенту с чеком → запись в CRM.
- Пост вышел на сайте → продублировать анонс в три соцсети.
- Файл упал в облачную папку → распознать → положить данные в таблицу.
Писать здесь Python - всё равно что строить станок ради одного гвоздя. В n8n уже лежат коннекторы к сотням сервисов, готовая авторизация, повторные попытки при сбое, история запусков с телом каждого запроса. Простая связка собирается за час-другой, и потом её читает даже тот, кто кода в глаза не видел, - это важно, когда ты уйдёшь в отпуск, а связку придётся чинить коллеге.
Где конструктор упирается и пора звать код:
- Логика сложнее «если-то»: вложенные условия, циклы по вложенным спискам, нетривиальные расчёты.
- Нужен точный контроль над данными и своя обработка ошибок с откатом.
- Тысячи элементов за прогон: визуальный поток становится медленным и нечитаемым.
- Требуется библиотека, которой в конструкторе просто нет.
Чаще всего работает гибрид. Развязку и расписание держишь в n8n, тяжёлый кусок логики выносишь в отдельный Python-скрипт и дёргаешь его как один блок через HTTP-запрос или узел выполнения кода. Так остаётся наглядность конструктора и при этом доступна вся мощь языка. Общая карта, что и чем закрывается на уровне процессов компании, собрана в обзоре автоматизации бизнес-процессов с нейросетями.
Как выбрать инструмент за 30 секунд?
Три вопроса перед тем, как что-то автоматизировать:
- Задача про правила или про смысл? Правила закрывает Python, смысл текста или картинки - нейросеть.
- Это стыковка готовых сервисов? Если да, смотри в сторону n8n. Если нужна своя логика, бери код.
- Как часто повторяется? Реже раза в месяц - скорее всего, автоматизировать не стоит, настройка съест больше, чем сэкономит.
Есть четвёртый вопрос, который я задаю себе с некоторых пор: кто будет это чинить через полгода? Скрипт на сорок строк с комментариями починит любой, кто умеет читать. Конструкция из двенадцати связанных сценариев с самописными вставками зависит от одного человека, и этот человек - ты. Иногда правильный ответ звучит как «оставить руками, но раз в квартал».
Что поставить на компьютер, чтобы начать?
Порог входа ниже, чем кажется. Нужен Python 3 с сайта python.org (на Windows при установке отметь галочку «Add Python to PATH», иначе команда не найдётся в консоли) и любой редактор кода - VS Code подойдёт. Больше для старта не требуется ничего.
Дальше три команды, которые стоит запомнить один раз:
python -m venv .venvсоздаёт отдельное окружение под проект, чтобы библиотеки одной задачи не конфликтовали с другой.pip install pandas openpyxlставит нужные библиотеки внутрь этого окружения.python script.pyзапускает твой файл.
Когда скрипт заработал руками, его пора ставить на расписание. На Windows это «Планировщик заданий», на macOS и Linux - cron. Строка 0 9 * * 1 в кроне означает «каждый понедельник в девять утра». Первую неделю после постановки на расписание проверяй результат вручную: типичная ошибка новичка - скрипт отлично работает из редактора и падает по расписанию, потому что запускается из другой папки и не находит файлы. Лечится тем, что все пути в коде делаются абсолютными.
Ещё один момент про данные. Если скрипт ходит в чужие сервисы, ему нужны ключи доступа. Никогда не пиши их прямо в коде, который потом отправишь кому-то на проверку или выложишь в репозиторий. Держи в отдельном файле .env и читай оттуда - библиотека python-dotenv делает это одной строкой.
Что делать, когда скрипт сломался?
Он сломается, вопрос только в сроке. Типовые причины повторяются из раза в раз:
- Изменился формат исходных данных. Поставщик добавил колонку, бухгалтерия переименовала лист, выгрузка стала приходить в другом порядке.
- Сайт поменял вёрстку. Парсер искал
divс определённым классом, класс переименовали, скрипт вернул пустоту. - Кончился или протух ключ доступа. Сервис ротирует токены, никого об этом не предупреждая.
- Обновилась библиотека. Метод переехал или сменил поведение по умолчанию.
- Данных стало больше. То, что работало на тысяче строк, упирается в память на миллионе.
Чтобы узнавать о поломке раньше клиента, добавь в скрипт три вещи. Журнал: модуль logging пишет в файл, что и когда произошло, включая полный текст исключения. Уведомление о падении: обёртка try/except вокруг основной логики отправляет сообщение в Telegram, если что-то пошло не так. Проверку разумности результата: если сводка за неделю вдруг вышла нулевой или в десять раз больше обычного, скрипт лучше остановить и позвать человека, чем разослать это по адресатам.
Ещё одна привычка, которая окупается позже: держи рядом со скриптом папку с образцом входного файла, на котором он точно отрабатывал. Когда через полгода выгрузка начнёт валить скрипт, сравнение свежего файла со старым за минуту показывает, что именно поменял поставщик.
Хуже всего то падение, которого не видно: скрипт отработал молча и выдал неправильную цифру. Явная ошибка заметна сразу, а тихо смещённые данные живут в отчётах месяцами.
Возражения, которые слышу чаще всего
«Не проще нанять человека на эту рутину?» Человек нужен там, где есть выбор и ответственность за него. Переименование файлов и сведение таблиц не требуют ни того ни другого, зато требуют чужого времени каждую неделю и добавляют ошибок при усталости. Живого сотрудника разумнее ставить на разбор спорных случаев, которые скрипт отложил в отдельную папку.
«Я не программист, у меня не получится». Первый рабочий скрипт сегодня пишет модель, а от тебя требуется точно описать задачу и проверить результат. Знание синтаксиса помогает, но начинать можно без него - на уровне «понимаю, что делает каждая строка, потому что модель объяснила». Через десяток скриптов синтаксис приходит сам. Если хочется мягче войти, начни с обзора нейросетей для малого бизнеса, где почти всё делается без единой строки кода.
«Модель напишет всё сама, зачем мне разбираться?» Написать - напишет. Проверить, что она посчитала именно твою колонку, а не соседнюю, придётся тебе. История про строку «Итого» из моей сводки - ровно об этом: код был безупречен, ошибочной была постановка.
«У нас всё живёт в Google Таблицах, Python туда дотянется?» Дотянется. Библиотека gspread открывает лист по ссылке и отдаёт его скрипту как обычную таблицу, а права выдаются сервисному аккаунту: заводишь его в консоли Google Cloud, копируешь адрес вида имя@проект.iam.gserviceaccount.com и делишься с ним документом так же, как с коллегой. Скрипт после этого видит только те файлы, доступ к которым ему открыли, остальное на диске остаётся для него невидимым.
«У нас чувствительные данные, нельзя отправлять их в облако». Тогда разделяй слои. Расчёты на Python идут локально и никуда не уходят. В модель отправляй обезличенные куски: текст отзыва без имени и телефона, суть обращения без реквизитов. Часть задач вообще решается локальными моделями на своём железе.
«А если скрипт ошибётся и мы отправим клиенту ерунду?» Поставь между скриптом и клиентом человека на первые недели. Автоматизация не обязана сразу заканчиваться отправкой: пусть она готовит черновик, а кнопку жмёшь ты. Доверие выдаётся по частям, после того как результат сошёлся десять раз подряд.
«Парсить чужие сайты вообще законно?» Сбор общедоступных данных сам по себе не запрещён, но у сайта есть пользовательское соглашение, у персональных данных - отдельное регулирование, а у сервера - лимиты. Читай robots.txt, ставь паузы, не собирай персональные данные людей без основания и не выдавай чужой контент за свой.
Какие ошибки чаще всего допускают на старте?
- Автоматизируют то, что делают редко. Настройка окупается только на регулярной рутине. Прикинь честно: сколько часов уйдёт на сборку и сколько минут в неделю она вернёт.
- Тащат всё в один инструмент. Python пытается парсить смысл, модель считает деньги, n8n гнёт сложную логику через двадцать связанных узлов. Пусть каждый делает своё.
- Не проверяют первый прогон. Скрипт делает ровно то, что ты сказал, включая твою ошибку в описании правила.
- Строят «систему» сразу. Начни с одного скрипта на одну боль, доведи его до состояния «работает без меня месяц», и только потом присоединяй следующий.
- Забывают про журнал и уведомления. Скрипт, который падает молча, хуже ручной работы: про ручную ты хотя бы знаешь, что её не сделал.
- Не оставляют документации. Пять строк в начале файла о том, откуда берутся данные, куда кладётся результат и что менять при смене формата, спасают тебя же через полгода.
Все шесть я собрал лично, некоторые дважды.
С чего начать на этой неделе?
План, который реально уложить в пять вечеров.
В понедельник заведи список повторяющихся задач: всё, что делаешь руками чаще раза в неделю. Отметь напротив каждой примерное время. Выбери одну, самую тупую и предсказуемую, с файлами или таблицами.
Во вторник опиши её по шагам текстом и отдай модели вместе с образцом данных. Получи скрипт, запусти на копии, добейся, чтобы он хотя бы отработал без ошибки.
В среду сверь результат с ручным расчётом полностью. Найдёшь расхождение - уточни правило и повтори. Расхождения на этом этапе нормальны, они и есть основная работа.
В четверг обвяжи скрипт логами и уведомлением о падении, вынеси пути и ключи в отдельный файл, добавь пять строк комментария в начало.
В пятницу поставь на расписание и посмотри, как он отработает сам. Дальше две-три недели проверяй выборочно.
Из отдельных скриптов постепенно собирается то, что мы в клубе называем ИИ-командой: скрипт-аналитик собирает цифры, нейросеть готовит черновики текстов, связка в n8n разносит результат по каналам. Как это устроено по ролям, подробно разобрано в материале о том, как собрать ИИ-сотрудника с нуля. Если раздумываешь, собирать самому или заказать готовое решение, есть отдельное сравнение подходов: ИИ-агенты под ключ или собрать самому. Готовые связки Python, нейросетей и n8n, промпты и шаблоны ролей цифровых сотрудников разбираем в закрытом канале ИИмперии - там можно взять рабочий каркас вместо сборки с нуля.
Та пятничная сводка отнимала у меня вечер в неделю, и минуты в этой истории оказались не самой большой потерей. Пока ты складываешь колонки, ты не думаешь о том, что вообще должно быть в этом отчёте и кому он нужен. Скрипт вернул мне этот вопрос, а вместе с ним и возможность на него ответить.
Источники
- Al Sweigart. Automate the Boring Stuff with Python - полный текст доступен бесплатно: automatetheboringstuff.com
- Документация pandas (работа с таблицами и отчётами): pandas.pydata.org/docs
- Документация Beautiful Soup (парсинг HTML): crummy.com/software/BeautifulSoup
- Документация Playwright для Python (страницы на JavaScript): playwright.dev/python
- Стандартная библиотека Python, модуль pathlib (работа с файлами и путями): docs.python.org/3/library/pathlib.html
- Документация n8n (визуальные связки и коннекторы): docs.n8n.io
Частые вопросы
Нужно ли уметь программировать, чтобы автоматизировать рутину?
Для простых сценариев хватит n8n или готовых связок. Python нужен, когда логика сложнее кнопок и требует точного контроля над данными.
Python или нейросеть - что выбрать?
Детерминированные задачи с чёткими правилами лучше держать на Python. Нейросеть берёт то, где надо понять смысл текста или изображения. Часто оба инструмента связывают в одну цепочку.
С чего начать, если я никогда не писал код?
Возьми одну повторяющуюся задачу с файлами или таблицами и автоматизируй только её. Классика для старта - книга Эла Свейгарта «Автоматизируй рутину с помощью Python».
Стоит ли автоматизировать задачу, которую делаешь раз в месяц?
Обычно нет: время на настройку не окупится. Начинай с того, что повторяется еженедельно и отнимает часы.
Сколько времени занимает первый рабочий скрипт?
Простая сборка таблиц с помощью модели пишется за вечер. Больше времени съедает сверка результата с ручным расчётом и обработка кривых данных.
Что делать, если скрипт сломался через месяц?
Смотреть журнал ошибок и показывать модели полный текст исключения. Чаще всего меняется формат исходной выгрузки или вёрстка сайта, который ты парсишь.