


Тройные кавычки позволяют красиво записать шаблон внутри функции, но пробелы перед строками становятся частью текста. textwrap.dedent убирает общий начальный отступ. На примере Mentoring.digital видно, как сохранить вложенное оформление.
В учебном тексте у всех содержательных строк есть четыре общих пробела, а у строки nested ещё два. После обработки останется только внутренняя вложенность.
from textwrap import dedent
text = """\
first
nested
last
"""
result = dedent(text)
print(repr(result))
# 'first\n nested\nlast\n' Обратная косая черта после открывающих тройных кавычек убирает начальный перевод строки именно в этом литерале. repr помогает увидеть оставшиеся пробелы и переводы строк.
strip удаляет подходящие символы с краёв всей строки. Он не выравнивает каждую строку по общему отступу. Если применять lstrip к каждой строке отдельно, можно потерять значимую вложенность.
Перед очисткой решите, какие пробелы относятся к оформлению исходного кода, а какие являются частью самого шаблона. Например, отступ внутри вложенного блока может быть нужен получателю текста.
Одна содержательная строка без отступа может сделать общий отступ пустым. Тогда ожидаемого сдвига остальных строк не произойдёт. Табуляция и пробелы считаются пробельными символами, но не являются одинаковыми отступами: их смешение требует отдельной проверки.
Проверьте repr до и после обработки, начальную и конечную пустые строки, а также одну строку с меньшим отступом. Если нужен только определённый формат переноса строк, не поручайте dedent разбор формата документа: функция обрабатывает отступы, а не синтаксис содержимого.
Такие упражнения входят в практику обучения Python. Разобрать многострочные шаблоны своего проекта можно с ментором по Python.