我可以用我心爱的%格式器实现可变填充字符和可变宽度吗?

2024-06-08 16:35:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我可能在这里约会,但是,在C中,%Fraster在成长,而且从来没有真正学会过C++中的新的IoSt流东西。因为python有%操作符,所以我从不费心去学习format操作符的强大功能。然而,似乎我可能碰到了砖墙与我心爱的%格式化程序。你知道吗

我想用可变字符(不是零字符)和可变宽度来“零填充”一个数字。格式方法似乎很好地处理了这个问题:

width = 10
base = 'd'
fill = '1'
{0:{fill}>{width}{base}}'.format(43, base=base,fill=fill, width=width)

我想不出如何使用%格式化程序使其工作!救命啊!你知道吗

'%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

我知道有解决办法来实现这一点,但有什么是真正简单的我错过了?你知道吗


Tags: 程序功能formatbasenot费心字符width
3条回答

不能对旧的%字符串格式化程序句号使用任意填充字符。格式支持使用*字符指定可变宽度,仅此而已。你知道吗

填充可以用空格或零来完成,其他什么都不用做。如果你想做一些其他的事情,一个麻烦的任务,你必须使用^{}^{}^{}方法。你知道吗

可以通过两个步骤生成格式化程序:

format = '%%%(flag)s%(width)s%(base)s' % dict(base=base, flag=flag, width=width)

假设fill是空字符串,或'-''0''#''+'' '在格式化标志之间切换;'0'是零填充选项。你知道吗

然后,第二步使用其输出格式化:

format % (43)

新的str.format()在内部使用多个过程,允许您更轻松地将参数插入占位符,支持更多格式、填充和其他功能。你知道吗

%操作符没有你所缺少的神奇技巧,但是你可以用str.ljust and str.rjust做你想做的事情

>>> # Pad the number 15 with zeros, up to 10 positions.
>>> ("%d" % 15).rjust(10, "0")
'0000000015'

您没有遗漏任何内容,这里只提供了一些转换标志字符:https://docs.python.org/2/library/stdtypes.html#string-formatting

即:

  • “#”值转换将使用“替代形式”(定义见下文)。你知道吗
  • “0”数值的转换将为零填充。你知道吗
  • “-”转换后的值将左调整(如果两个值都给定,则重写“0”转换)。你知道吗
  • “”(空格)有符号转换产生的正数(或空字符串)之前应留一个空格。你知道吗
  • “+”符号字符(“+”或“-”)将位于转换之前(覆盖“空格”标志)。你知道吗

不支持像现在这样用1填充。你知道吗

相关问题 更多 >