我想用空格填充字符串。我知道下面的方法适用于0:

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

但我想要这个的时候该怎么办呢?:

'hi    '

当然,我可以测量字符串长度和做str+" "*剩,但我想要最短的方式。


当前回答

字符串格式方法允许您使用嵌套的关键字参数做一些有趣的事情。最简单的例子:

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

如果你想把16作为一个变量传入:

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

如果你想传入整个工具包的变量,那么:

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

结果是(你猜对了):

'Hi              '

对于所有这些,你可以使用python 3.6+ f-strings:

message = 'Hi'
fill = ' '
align = '<'
width = 16
f'{message:{fill}{align}{width}}'

当然,结果是:

'Hi              '

其他回答

你可以使用列表理解,这也会给你一个关于空格数量的想法,这将是一行。

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

你也可以居中你的字符串:

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

只要去掉0,它就会添加空格:

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

从Python 3.6开始,你可以这样做

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

字面值字符串插值。

或者,如果你的填充大小是一个变量,就像这样(谢谢@Matt M.!):

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

对于一个灵活的方法,即使在格式化复杂的字符串时也能工作,你可能应该使用字符串格式化迷你语言,

使用任意一个f字符串

>>> f'{"Hi": <16} StackOverflow!'  # Python >= 3.6
'Hi               StackOverflow!'

或者str.format()方法

>>> '{0: <16} StackOverflow!'.format('Hi')  # Python >=2.6
'Hi               StackOverflow!'