Как отступать содержимое многострочной строки?

Я использую модуль cog python для генерации кода шаблона C ++, и он отлично работает до сих пор, но моя единственная проблема заключается в том, что полученный код, который является уродливым сам по себе, усугубляется тем фактом, что он не имеет отступов. Мне слишком ленив, чтобы получить отступ справа в функции генерации строк, поэтому мне интересно, есть ли функция использования Python для отступов содержимого многострочной строки?

Почему бы не вывести выходные данные через форматирование кода командной строки, например, астиль?

Вы можете отступать от строк в строке, просто набирая каждый из них с правильным количеством символов пэда. Это легко сделать с помощью функции textwrap.indent() которая была добавлена ​​в модуль в Python 3.3. В качестве альтернативы вы можете использовать приведенный ниже код, который также будет работать в более ранних версиях Python.

 try: import textwrap textwrap.indent except AttributeError: # undefined function (wasn't added until Python 3.3) def indent(text, amount, ch=' '): padding = amount * ch return ''.join(padding+line for line in text.splitlines(True)) else: def indent(text, amount, ch=' '): return textwrap.indent(text, amount * ch) text = '''\ And the Lord God said unto the serpent, Because thou hast done this, thou art cursed above all cattle, and above every beast of the field; upon thy belly shalt thou go, and dust shalt thou eat all the days of thy life: And I will put enmity between thee and the woman, and between thy seed and her seed; it shall bruise thy head, and thou shalt bruise his heel. 3:15-King James ''' print('Text indented 4 spaces:\n') print(indent(text, 4)) 

Результат:

 Text indented 4 spaces: And the Lord God said unto the serpent, Because thou hast done this, thou art cursed above all cattle, and above every beast of the field; upon thy belly shalt thou go, and dust shalt thou eat all the days of thy life: And I will put enmity between thee and the woman, and between thy seed and her seed; it shall bruise thy head, and thou shalt bruise his heel. 3:15-King James 

Если у вас есть ведущая новая строка:

Heredocs может содержать литеральную новую строку, или вы можете добавить ее.

 indent = ' ' indent_me = ''' Hello World ''' indented = indent_me.replace('\n', '\n' + indent) print(indented) 

Вот он показан в дампе pprint:

>>> pprint (с отступом)

' Hello\n World\n '

Неловко, но работает


Если у вас нет ведущей новой строки:

 indent = ' ' indent_me = '''\ Hello World ''' indented = indent + indent_me.replace('\n', '\n' + indent) print(indented) 

Необязательно, обрезать первую строку новой строки и конечные пробелы / вкладки

 .lstrip('\n').rstrip(' \t') 

Существует скрипт, расположенный в каталоге python Tools/Scripts/ который предназначен, прежде всего, для исправления отступов для всех файлов python. Однако вы можете легко настроить скрипт и применить его к разделам / строкам кода или другим типам файлов.

Сценарий также находится в Интернете, здесь:
http://svn.python.org/projects/python/trunk/Tools/scripts/reindent.py

Или, как модуль здесь:
http://pypi.python.org/pypi/Reindent/0.1.0