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')
新格式让我们可以这样做:'{:.<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')