Как убрать общий отступ многострочной строки через textwrap.dedent

Как убрать общий отступ многострочной строки через textwrap.dedent
Содержание статьи

Тройные кавычки позволяют красиво записать шаблон внутри функции, но пробелы перед строками становятся частью текста. 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 решает другую задачу

strip удаляет подходящие символы с краёв всей строки. Он не выравнивает каждую строку по общему отступу. Если применять lstrip к каждой строке отдельно, можно потерять значимую вложенность.

Перед очисткой решите, какие пробелы относятся к оформлению исходного кода, а какие являются частью самого шаблона. Например, отступ внутри вложенного блока может быть нужен получателю текста.

Как проверить проблемный шаблон

Одна содержательная строка без отступа может сделать общий отступ пустым. Тогда ожидаемого сдвига остальных строк не произойдёт. Табуляция и пробелы считаются пробельными символами, но не являются одинаковыми отступами: их смешение требует отдельной проверки.

Проверьте repr до и после обработки, начальную и конечную пустые строки, а также одну строку с меньшим отступом. Если нужен только определённый формат переноса строк, не поручайте dedent разбор формата документа: функция обрабатывает отступы, а не синтаксис содержимого.

Такие упражнения входят в практику обучения Python. Разобрать многострочные шаблоны своего проекта можно с ментором по Python.

Похожие статьи по данной теме