Я использую модуль python cog для создания кода шаблона С++, и он отлично работает до сих пор, но моя единственная проблема заключается в том, что полученный код, который является уродливым сам по себе, усугубляется тем фактом, что он не отступил. Я слишком ленив, чтобы получить отступ справа в функции генерации строк, поэтому мне интересно, есть ли функция использования Python для отступов содержимого многострочной строки?
Как отступать содержимое многострочной строки?
Ответ 1
Почему бы не пропустить вывод через форматировщик кода командной строки, такой как астиль?
Ответ 2
Вы можете отступать от строк в строке, просто набирая каждый из них с соответствующим количеством символов пэда. Это можно легко сделать, используя функцию 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
Ответ 3
Если у вас есть ведущая строка новой строки:
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')
Ответ 4
Существует каталог 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