我可能在这里约会自己,但是在C格式的%formatter中长大了,从来没有真正学过C ++中新的iostream东西。由于python有%运算符,我从不费心去学习格式运算符的强大功能。然而,似乎我可能已经与我心爱的%格式化器打了一堵砖墙。
我想用变量字符(不是零字符)和可变宽度“zeropad”一个数字。看起来格式化方法处理得非常好:
width = 10
base = 'd'
fill = '1'
{0:{fill}>{width}{base}}'.format(43, base=base,fill=fill, width=width)
我无法弄清楚如何使用%formatter来实现这一点!救命!
'%013d'%(43) #works, but will not "work" for %513d where 5 should be the pad character
'%0*d'%(13,43) #as does this, but
'%a13d'%(43) #does not fill with a
我知道有一些解决方法可以达到这个目的,但是有一些非常简单的东西我不知道吗?
答案 0 :(得分:1)
您不能对旧的%
字符串格式化程序句号使用任意填充字符。格式仅支持使用*
字符指定变量宽度,这就是它。
填充可以用空格或零来完成,没有别的。如果您想填写其他内容,则必须使用str.rjust()
,str.ljust()
和str.center()
方法,这是一项繁琐的任务。
您可以分两步生成格式化程序:
format = '%%%(flag)s%(width)s%(base)s' % dict(base=base, flag=flag, width=width)
前提是fill
为空字符串,或'-'
,'0'
,'#'
,'+'
或' '
在格式化标记之间切换; '0'
是零填充选项。
然后第二步使用其输出格式化:
format % (43)
新的str.format()
在内部使用多个传递,允许您更轻松地将参数插入到占位符中,和支持更多格式,填充和其他功能。
答案 1 :(得分:1)
你遗失的%
运算符没有神奇的技巧,但你可以用str.ljust and str.rjust
>>> # Pad the number 15 with zeros, up to 10 positions.
>>> ("%d" % 15).rjust(10, "0")
'0000000015'
答案 2 :(得分:0)
您没有遗漏任何内容,只有少数转换标记字符可用,如此处所述:https://docs.python.org/2/library/stdtypes.html#string-formatting
即:
不支持尝试在此处使用1
进行填充。
答案 3 :(得分:0)
我可以告诉你,你必须格式化两次。它变得混乱:
>>> ('%%0%dd' % width) % 43
'0000000043'