Как я могу заполнить строку Python пробелами?

Я хочу заполнить строку пробелами. Я знаю, что для zero работает следующее:

>>> print  "'%06d'"%4
'000004'

но что мне делать, когда я этого хочу?:

'hi    '

конечно, я могу измерить длину строки и сделать str+" "*leftover, но я хотел бы кратчайший путь.

12 ответов


вы можете сделать это с помощью str.ljust(width[, fillchar]):

верните строку, оставленную оправданной в строке длины ширина. Заполнение выполняется с помощью указанного fillchar (по умолчанию-пробел). Исходная строка возвращается, если ширина меньше len(s).

>>> 'hi'.ljust(10)
'hi        '

если не требуется поддержка Python 2.5, вы можете (и вероятно должны) использовать мини-язык форматирования строк, например:

'{0: <16}'.format('Hi')

вы можете попробовать это:

print "'%-100s'" % 'hi'

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

>>> '{message: <16}'.format(message='Hi')
'Hi             '

если вы хотите передать в 16 переменной:

>>> '{message: <{width}}'.format(message='Hi', width=16)
'Hi              '

если вы хотите передать переменные для весь комплект и kaboodle:

'{message:{fill}{align}{width}}'.format(
   message='Hi',
   fill=' ',
   align='<',
   width=16,
)

результаты:

>>> '{message:{fill}{align}{width}}'.format(
...    message='Hi',
...    fill=' ',
...    align='<',
...    width=16,
... )
'Hi              '

использовать str.ljust():

>>> 'Hi'.ljust(6)
'Hi    '

вы также должны рассмотреть string.zfill(), str.ljust() и str.center() для форматирования строки. Они могут быть прикованы цепями и иметь 'заполнить' символ указан, таким образом:

>>> ('3'.zfill(8) + 'blind'.rjust(8) + 'mice'.ljust(8, '.')).center(40)
'        00000003   blindmice....        '

эти операции форматирования строк имеют преимущество работы в Python v2 и В3.

посмотри pydoc str когда-нибудь: там есть множество хороших вещей.


правильный способ сделать это - использовать синтаксис формата Python, как описано в официальный docummentation

для этого случая это будет просто:
'{:10}'.format('hi')
выходы:
'hi '

объяснение:

format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
fill        ::=  <any character>
align       ::=  "<" | ">" | "=" | "^"
sign        ::=  "+" | "-" | " "
width       ::=  integer
precision   ::=  integer
type        ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

почти все, что вам нужно знать, что есть ^.

обновление: начиная с python 3.6, это еще удобнее с буквальной Строковой интерполяцией!

foo = 'foobar'
print(f'{foo:10} is great!')
# foobar     is great!

вы можете центр строку:

'{0: ^20}'.format('nice')

начиная с Python 3.6 вы можете просто сделать

>>> strng = 'hi'
>>> f'{strng: <10}'

С символьная строка интерполяции.

или, если ваш размер заполнения находится в переменной, как это (спасибо @Matt M.!):

>>> to_pad = 10
>>> f'{strng: <{to_pad}}'

используйте Python 2.7 мини-форматирование для строки:

'{0: <8}'.format('123')

этот левый выравнивает и накладывает до 8 символов с символом''.


просто удалите 0, и вместо этого он добавит пространство:

>>> print  "'%6d'"%4

не будет ли более подходящие для Python, чтобы использовать нарезки?

например, чтобы заполнить строку пробелами справа, пока она не будет длиной 10 символов:

>>> x = "string"    
>>> (x + " " * 10)[:10]   
'string    '

заполнить пробелы слева до 15 символов:

>>> (" " * 15 + x)[-15:]
'         string'

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


+= можно использовать для добавления в строку

>>> string = 'hi'
>>> for s in range(0,5):
...    string += ' '
... 
>>> string
'hi          '