新格式允许我们执行此操作:'{:.<12}'.format('##')
- 可选填充字符
我们可以使用旧格式来做到这一点吗?
(我知道我们可以填充空格'%-12s' % '##'
)
此外,旧的格式允许我们执行此操作:'%-*s' % (12, '##')
- 可变长度
我们可以使用新的格式吗?
答案 0 :(得分:5)
为了使用new-format进行可变长度,您可以使用替换嵌套 -
>>> '{:{}<{}}'.format('##','.',12)
'##..........'
>>> '{:{}<{}}'.format('##','-',12)
'##----------'
>>> '{:{}<{}}'.format('##','-',20)
'##------------------'
甚至空格作为填充字符 -
>>> '{:{}<{}}'.format('##',' ',20)
'## '
请注意,您并不总是需要使用替换嵌套,您也可以直接以格式指定它们 -
>>> '{: <12}'.format('##')
'## '
您还可以指定每个参数的位置,以确定哪个参数位于何处。示例 -
>>> '{2:{0}<{1}}'.format('.',12,'##')
'##..........'
>>> '{0:{1}<{2}}'.format('##','-',20)
'##------------------'
答案 1 :(得分:2)
使用format
,您可以嵌套替换项:
'{:.<{}}'.format('##',12)
所以format
更强大。 %
无法使用可选的填充字符。
答案 2 :(得分:1)
对于问题的第一部分,您可以保持对齐并使用空格作为填充字符,宽度为12:
'%-*s' % (12, '##')
可以替换为'{: <12}'.format('##')
。
对于第二部分,您不能使用旧样式格式指定填充字符。
有一个不错的网站here,它显示了旧版和新版的大部分功能,一个覆盖填充和对齐字符串的代码段:
填充和对齐字符串
默认情况下,值的格式设置为只占用表示内容所需的字符数。但是,也可以定义一个值应填充到特定长度。
不幸的是,旧式和新式格式之间的默认对齐方式不同。旧样式默认为右对齐,而新样式则左对齐。
Align right:
Old '%10s' % ('test',)
New '{:>10}'.format('test')
Align left:
Old
'%-10s' % ('test',)
New
'{:10}'.format('test')
通过参数:
在前面的示例中,值&#39; 10&#39;被编码为格式字符串的一部分。但是,也可以将这些值作为参数提供。
Old
'%*s' % ((- 8), 'test')
New
'{:<{}s}'.format('test', 8)
同样,通过提供对填充和对齐值的更多控制,新样式格式优于旧变体。 您可以选择填充字符:
此操作不适用于旧式格式。
New
'{:_<10}'.format('test')
Output
还有居中对齐值:
此操作不适用于旧式格式。
New
'{:^10}'.format('test')