Генерация QR-кода и не только: как Python автоматизирует рутину за 30 минут
Генерация кода на Python перестала быть задачей только для программистов: DevOps-инженер Иван из ИТ-холдинга Т1 показал на конференции «Импульс Т1», как автоматизировать рутину от простых сниппетов до рефакторинга целых проектов с помощью шаблонизаторов и синтаксических деревьев.

Когда код генерируется из схемы (например, OpenAPI), исчезает риск рассинхронизации между описанием API и реализацией, а изменения вносятся за минуты вместо часов ручной правки.
Подход, описанный инженером Т1, применим не только к «чистому» программированию. Авторы Дзена и маркетологи сталкиваются с похожими задачами: массовая генерация QR-кода для ссылок, создание однотипных конфигураций, автоматическая подготовка шаблонов. Статья на Хабре разбирает три уровня генерации: конкатенацию строк, шаблонизацию через Jinja2 и работу с AST (абстрактным синтаксическим деревом, древовидным представлением структуры кода). Ниже разберём каждый шаг так, чтобы повторить мог и нетехнарь.
Что понадобится?
- Python 3.8 или новее (скачать бесплатно на python.org)
- Текстовый редактор или IDE (среда разработки): подойдут VS Code, PyCharm Community Edition
- Библиотека Jinja2 для шаблонизации (устанавливается одной командой
pip install jinja2) - Терминал (командная строка) на Windows, macOS или Linux
- 30 минут свободного времени на первый запуск
Пошаговая инструкция: от сниппета до шаблонизатора
1. Подготовьте данные для генерации.
Определите, что будет источником. В примере из Т1 это словарь переводов, но на практике источником может быть внешний API, JSON-файл, содержимое базы данных или CLI-аргументы (параметры, которые вы передаёте скрипту при запуске).
TRANSLATIONS = {
"hello": "Привет, {username}!",
"welcome": "Добро пожаловать!",
"goodbye": "Пока, {username}!",
}
2. Сгенерируйте код конкатенацией (склеиванием строк).
Самый простой способ: пройтись по данным, собрать нужные строки и вывести результат. Каждый ключ словаря превращается в константу с префиксом MESSAGE_.
for key, value in TRANSLATIONS.items():
const_name = "MESSAGE_" + key.upper()
print(const_name + ' = "' + value + '"')
На выходе в терминале появится готовый код:
MESSAGE_HELLO = "Привет, {username}!"
MESSAGE_WELCOME = "Добро пожаловать!"
MESSAGE_GOODBYE = "Пока, {username}!"
3. Переходите к шаблонизации, когда конкатенации мало.
Если проект поддерживает несколько языков программирования или нужны пользовательские шаблоны, склейка строк становится хрупкой. Jinja2 разделяет логику получения данных и структуру итогового кода.
import jinja2
environment = jinja2.Environment()
template = environment.from_string("""
{%- for key, value in data.items() -%}
MESSAGE_{{ key | upper }} = "{{ value }}"
{% endfor -%}
""")
print(template.render(data=TRANSLATIONS))
Результат тот же, но теперь шаблон можно хранить в отдельном файле, подгружать из API и подставлять под нужный язык без переписывания генератора.
4. Меняйте существующий код через AST.
Когда задача не создать код с нуля, а отрефакторить существующий (например, заменить все вызовы print на logger.info), простая замена текстом опасна: можно испортить комментарии. AST (абстрактное синтаксическое дерево) разбирает код в древовидную структуру, позволяя менять только нужные узлы.
import ast
code = """
# print result of operation
print("Result:", 1 + 2)
"""
tree = ast.parse(code)
for node in ast.walk(tree):
if not isinstance(node, ast.Call):
continue
if isinstance(node.func, ast.Name) and node.func.id == "print":
node.func.id = "logger.info"
print(ast.unparse(tree))
Комментарий остаётся нетронутым, а print превращается в logger.info только там, где это вызов функции.
Где здесь генерация QR-кода?
Генерация QR-кода на Python следует той же логике: вы берёте данные (URL, текст), передаёте их генератору и получаете готовый результат. Библиотека qrcode устанавливается командой pip install qrcode[pil], а сам скрипт генерации QR-кода укладывается в четыре строки:
import qrcode
img = qrcode.make("https://dzen.guru")
img.save("dzen_guru_qr.png")
Если нужна массовая генерация QR-кода для списка ссылок, применяйте тот же шаблонный подход: данные в словаре, цикл по ключам, на выходе папка с файлами.
Допустим, у вас есть файл texts.json с 200 строками интерфейса. Вместо ручного копирования запускаете генератор:
import json
import jinja2
with open("texts.json", "r", encoding="utf-8") as f:
data = json.load(f)
env = jinja2.Environment()
tpl = env.from_string("""
{%- for key, value in data.items() -%}
MESSAGE_{{ key | upper }} = "{{ value }}"
{% endfor -%}
""")
with open("constants.py", "w", encoding="utf-8") as out:
out.write(tpl.render(data=data))
На входе: JSON с 200 парами ключ-значение. На выходе: файл constants.py с 200 готовыми константами. Время: 2 секунды вместо часа ручной работы.
- Забыли экранирование. Если значение содержит кавычки или спецсимволы, конкатенация сломает синтаксис. Шаблонизатор Jinja2 позволяет добавить фильтр экранирования, конкатенация такой защиты не даёт.
- Не проверили результат. Сгенерированный код может выглядеть правильно, но не пройти проверку синтаксиса. Всегда запускайте
python -m py_compile generated_file.pyпосле генерации. - Смешали логику и шаблон. Если в шаблоне Jinja2 появляются условия на десять строк, это сигнал: логику надо вынести в Python-код, а шаблону оставить только структуру.
- Заменяли код текстовым поиском вместо AST. Поиск-замена
printнаlogger.infoсломает строку# don't print secretsили переменнуюfingerprint. AST меняет только вызовы функций.
Что делать с этим прямо сейчас?
- Автору Дзена. Попробуйте генерацию QR-кода через Python-скрипт выше: вставляйте QR со ссылкой на свой канал в обложки статей, не платя за сторонние сервисы.
- Маркетологу. Массовая генерация QR-кода для UTM-меченых ссылок экономит часы. Один скрипт на 10 строк заменяет ручное создание в онлайн-генераторах.
- Разработчику и DevOps-инженеру. Начните с конкатенации для простых задач, переходите на Jinja2, когда шаблонов станет больше одного, и осваивайте AST для рефакторинга. Подход из Т1 работает с любыми схемами: OpenAPI, AsyncAPI, gRPC (протокол удалённого вызова процедур от Google).
Генерация кода через шаблонизаторы и AST не требует нейросетей, и это её сила: результат предсказуем, воспроизводим и не страдает от галлюцинаций (когда ИИ уверенно выдумывает то, чего не было). По моим наблюдениям, даже авторы без технического опыта осваивают генерацию QR-кода и простых констант за один вечер. Честная оговорка: AST-подход требует понимания структуры языка, и если вы никогда не писали на Python, начните с конкатенации и Jinja2, а к синтаксическим деревьям вернитесь, когда задачи усложнятся.
Три инструмента, одна логика: данные на входе, шаблон посередине, готовый код на выходе. Начните с четырёх строк генерации QR-кода сегодня, и завтра конкатенация покажется такой же естественной, как копипаст, только быстрее.
Попробуйте ИИ-инструменты dzen.guru
Автоматизируйте рутину в контенте так же, как разработчики автоматизируют код
Попробовать бесплатно
Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

Техническое лидерство в эпоху ИИ: пять правил от CTO, где один инженер заменяет команду
Компания Latch (платформа управления инженерными процессами) опубликовала в июне 2025 года манифест технического директора, который описывает, как…

Использование ИИ в строительстве снизило травматизм на 30%: кейс с одной платформой вместо трёх
Строительная компания внедрила систему из камер, датчиков и нейросетей, которая одновременно закрыла охрану труда, учёт транспорта и контроль сроков на…

Что такое ИИ-агент: 41% компаний уже перевели клиентский сервис на автопилот
Компании годами ставили чат-ботов поверх старых процессов, и клиенты по-прежнему пересказывали проблему каждому новому оператору, а агентный ИИ (autonomous AI…
Комментарии