it-swarm.com.ru

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

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

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

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

'hi    '

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

397
taper

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

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

>>> 'hi'.ljust(10)
'hi        '
565
Felix Kling

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

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

Новый (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              '
83
CivFan

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

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

Используйте 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 когда-нибудь: там много хороших вещей.

35
Johnsyweb

Правильный способ сделать это - использовать синтаксис формата 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!
32
Granitosaurus

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

'{0: ^20}'.format('Nice')
16
Remi

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

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

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

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

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

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

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

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

7
aodj

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

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

Разве не было бы более Pythonic использовать нарезку?

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

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

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

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

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

3
Zev Chonoles

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

"hello" + " ".join([" " for x in range(1,10)])
output --> 'hello                 '
1
foobar666

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

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

Хороший трюк для использования вместо различных форматов печати:

(1) Подушка с пробелами справа:

('hi' + '        ')[:8]

(2) Подушка с ведущими нулями слева:

('0000' + str(2))[-4:]
0
Erik Anderson