Как использовать формат Python для предварительного ожидания указанного количества пробелов в строке - PullRequest
0 голосов
/ 29 ноября 2018

Как использовать функцию string format для предварительного ожидания указанного числа пробелов в строке?Все, что я ищу (например, этот пост и этот пост ), подсказывает мне использовать что-то вроде

"{:>15}".format("Hello")

Но это даст мне 10 пробелов впереди.Что если я всегда хочу поставить 4 пробела впереди, сохраняя выравнивание по левому краю, когда входные строки имеют переменную длину?Например:

    Hello
    Goodbye

Я думал о

"{:4}{}".format("", "Hello")

, который работает, но затем я должен передать эту поддельную пустую строку.Есть ли более чистый способ добиться этого?

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

Если в качестве числа необходимых пробелов указано n *

newString = f'{" "*n}oldstring'

следует добавить n пробелов

0 голосов
/ 29 ноября 2018

Вы можете использовать вспомогательную функцию и определить желаемое количество пробелов или тип отступа:

def indent(word, n = 1, style = ' '):
    print(f"{style * n}->{word}")

indent('hello', n = 10)
>>          ->hello

indent('hello', n = 10, style = '*')
>>**********->hello

Вы можете изменить значение по умолчанию для ключевого слова n или style в соответствии с вашимнеобходимо, чтобы вам не всегда приходилось использовать f-strings или format на каждом выходе.

0 голосов
/ 29 ноября 2018

Формат не используется, но textwrap.indent() делает то, что вы хотите.

 >>> import textwrap
 >>> s = 'hello\n\n \nworld'
 >>> textwrap.indent(s, ' ' * 4)
 '    hello\n\n \n  world'

Python также позволяет вам определять свои собственные параметры форматирования ,См. этот вопрос пример того, как его переопределить.В этом случае это может выглядеть следующим образом:

import string
import re

class Template(string.Formatter):
    def format_field(self, value, spec):
        if re.match('\d+t', spec):
            value = ' ' * int(spec[:-1]) + value
            spec = ''
        return super(Template, self).format_field(value, spec)

Использование:

>>> fmt = Template().format
>>> fmt('{:4t} {}', 'hello', 'world')
    hello world

Изучая язык форматных строк, я не вижу способа сделать именно то, что вы хотите.

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