Python 字符串格式 - 旧的 `%` 与新的 `str.format`

Python string formatting - old `%` vs new `str.format`

新格式让我们可以这样做:'{:.<12}'.format('##') - 可选填充字符。
我们可以使用旧格式来做到这一点吗?
(我知道我们可以用空格填充 '%-12s' % '##'

此外,旧格式允许我们这样做:'%-*s' % (12, '##') - 可变长度。
我们可以使用新的格式来做到这一点吗?

要使用新格式进行可变长度,您可以使用替换嵌套 -

>>> '{:{}<{}}'.format('##','.',12)
'##..........'
>>> '{:{}<{}}'.format('##','-',12)
'##----------'
>>> '{:{}<{}}'.format('##','-',20)
'##------------------'

偶数空格作为填充字符 -

>>> '{:{}<{}}'.format('##',' ',20)
'##                  '

请注意,您并不总是需要使用替换嵌套,您也可以直接在格式中指定它们 -

>>> '{: <12}'.format('##')
'##          '

您还可以指定每个参数的位置来决定哪个参数放在哪里。例子-

>>> '{2:{0}<{1}}'.format('.',12,'##')
'##..........'
>>> '{0:{1}<{2}}'.format('##','-',20)
'##------------------'

使用 format 您可以嵌套替换:

'{:.<{}}'.format('##',12)

所以format更强大。 %.

不能使用可选的填充字符

对于问题的第一部分,您可以左对齐并使用宽度为 12 的 space 作为填充字符:

'%-*s' % (12, '##')可以换成'{: <12}'.format('##').

对于第二部分,您不能使用旧样式格式指定填充字符。

有一个不错的网站 here 显示了旧版与新版可以做什么和不能做什么,这是一个涵盖填充和对齐字符串的片段:

填充和对齐字符串

By default values are formatted to take up only as many characters as needed to represent the content. It is however also possible to define that a value should be padded to a specific length.

Unfortunately the default alignment differs between old and new style formatting. The old style defaults to right aligned while for new style it's left.

Align right:

Old '%10s' % ('test',) 
New '{:>10}'.format('test')

Align left:

Old

'%-10s' % ('test',)
New

'{:10}'.format('test')

根据参数:

In the previous example, the value '10' is encoded as part of the format string. However, it is possible to also supply such values as an argument.

Old

'%*s' % ((- 8), 'test')
New

'{:<{}s}'.format('test', 8)

Again, new style formatting surpasses the old variant by providing more control over how values are padded and aligned. You are able to choose the padding character:

此操作不适用于旧式格式。

New

'{:_<10}'.format('test')
Output

And also center align values:

此操作不适用于旧式格式。

New

'{:^10}'.format('test')