Есть ли более Pythonic способ дополнить строку переменной длины, используя string.format?

Я хочу дополнить строку до определенной длины, в зависимости от значения переменной, и мне интересно, есть ли стандартный, Pythonic способ сделать это с помощью string.format мини-язык. Прямо сейчас я могу использовать конкатенацию строк:

padded_length = 5
print(("\n{:-<" + str((padded_length)) + "}").format("abc"))
# Outputs "abc--"

padded_length = 10
print(("\n{:-<" + str((padded_length)) + "}").format("abc"))
#Outputs "abc-------"

Я пробовал этот метод:

print(("{:-<{{padded_length}}}".format(padded_length = 10)).format("abc"))

но вызывает исключение IndexError: tuple index out of range:

Traceback (most recent call last):
  File "<pyshell#41>", line 1, in <module>
    print(("{:-<{{padded_length}}}".format(padded_length = 10)).format("abc"))
IndexError: tuple index out of range

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


person Ricardo Altamirano    schedule 09.07.2012    source источник


Ответы (3)


print(("\n{:-<{}}").format("abc", padded_length))

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

print(("{{:-<{padded_length}}}".format(padded_length=10)).format("abc"))
person John La Rooy    schedule 09.07.2012
comment
Спасибо большое. И вот я подумал, что достаточно внимательно прочитал документацию, когда ответ был совершенно ясен. - person Ricardo Altamirano; 09.07.2012

Следующий пример должен предоставить вам решение.

padded_length = 5
print("abc".rjust(padded_length, "-"))

печатает:

--abc
person Ned Batchelder    schedule 09.07.2012

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

>>>'{{0:-<{padded_length}}}'.format(padded_length=10).format('abc')
'abc-------'
person Joel Cornett    schedule 09.07.2012
comment
А, это имеет смысл. Я не думал, через какие скобки нужно выйти достаточно четко. - person Ricardo Altamirano; 09.07.2012