Как отступать содержимое многострочной строки?
Я использую модуль cog python для генерации кода шаблона C ++, и он отлично работает до сих пор, но моя единственная проблема заключается в том, что полученный код, который является уродливым сам по себе, усугубляется тем фактом, что он не имеет отступов. Мне слишком ленив, чтобы получить отступ справа в функции генерации строк, поэтому мне интересно, есть ли функция использования Python для отступов содержимого многострочной строки?
- Создавать формы на стороне клиента без состояния с серверных моделей?
- Грако «код» поколения
- Python, генерирующий 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
- Генерирование случайных векторов евклидовой нормы <= 1 в Python?
- Невозможно установить Python-MySQL на OS X 10.10 Yosemite