Как сделать отступ для содержимого многострочной строки? - PullRequest
18 голосов
/ 23 ноября 2011

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

Ответы [ 4 ]

23 голосов
/ 02 декабря 2011

Вы можете сделать отступ строк в строке, просто заполнив каждую из них нужным количеством символов пэда. Это легко сделать с помощью функции 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
4 голосов
/ 07 июня 2015

Если у вас есть начальный символ новой строки:

Heredocs может содержать буквальный символ новой строки, или вы можете добавить его перед ним.1007 *

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

' Hello\n World\n '

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


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

indent = '    '

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

Опционально, обрезать первую новую строку и завершающие пробелы / табуляции

.lstrip('\n').rstrip(' \t')
3 голосов
/ 23 ноября 2011

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

0 голосов
/ 23 ноября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...