Ответ 1
Почему бы не пропустить вывод через форматировщик кода командной строки, такой как астиль?
Я использую модуль python cog для создания кода шаблона С++, и он отлично работает до сих пор, но моя единственная проблема заключается в том, что полученный код, который является уродливым сам по себе, усугубляется тем фактом, что он не отступил. Я слишком ленив, чтобы получить отступ справа в функции генерации строк, поэтому мне интересно, есть ли функция использования 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')
Существует каталог script, расположенный в каталоге python Tools/Scripts/
, который предназначен прежде всего для исправления отступов для всех файлов python. Однако вы можете легко настроить script немного и применить его к разделам/строкам кода или другим типам файлов.
script также находится в Интернете, здесь:
http://svn.python.org/projects/python/trunk/Tools/scripts/reindent.py
Или, как модуль здесь:
http://pypi.python.org/pypi/Reindent/0.1.0