Как я могу заполнить строку Python пробелами? - PullRequest
445 голосов
/ 15 апреля 2011

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

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

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

'hi    '

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

Ответы [ 14 ]

611 голосов
/ 15 апреля 2011

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

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

>>> 'hi'.ljust(10)
'hi        '
324 голосов
/ 15 апреля 2011

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

'{0: <16}'.format('Hi')
101 голосов
/ 13 августа 2014

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

>>> '{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,
)

Что приводит (как вы уже догадались):

'Hi              '
73 голосов
/ 15 апреля 2011

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

print "'%-100s'" % 'hi'
40 голосов
/ 21 июля 2016

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

Для этого случая это будет просто:
'{: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!
34 голосов
/ 15 апреля 2011

Использование str.ljust():

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

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

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

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

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

22 голосов
/ 06 июля 2016

Начиная с Python 3.6, вы можете просто

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

с интерполяцией литеральной строки .

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

>>> to_pad = 10
>>> f'{strng: <{to_pad}}'
17 голосов
/ 24 июля 2012

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

'{0: ^20}'.format('nice')
7 голосов
/ 15 апреля 2011

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

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

Это выравнивание по левому краю и добавление 8 символов к символу ''.

5 голосов
/ 12 июня 2015

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

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