具有特定WIdth的Python字符串

时间:2011-11-02 17:53:16

标签: python string formatting python-2.4

我一直在寻找关于如何做到这一点的一个很好的解释,所以指向正确的方向将有助于解决以下问题。

我需要以漂亮的格式打印出标题以及数据,不幸的是发生了什么 如下所示。

DeviceName   KB used   KB quota   KB hard limit   grace   
/media/Stuff        58384   5242880   0   none

为了做到这一点,我为标题构建了一个列表。

HEADER=['DeviceName', 'KB USED', . . .]

与我需要打印的其他条目相同。 为了打印出来,我做了类似的事情

print "".join('%s'.rjust(5) %i for i in HEADER)

所以这显然不起作用,因为rjust只是填充字符串右边的空格。有没有办法打印一个字符串,使其占据一定的宽度,如果字符串不够长,不适合宽度,那么只需用空格填充它?

P.S。我仅限于python 2.4,这意味着我无法使用python 2.7中的格式。

4 个答案:

答案 0 :(得分:2)

你想要反过来。 这样怎么样:

>>> "%-5s" % 'sss'
'sss  '

答案 1 :(得分:2)

您可以使用'%*s'

HEADER = "DeviceName   |KB used|KB quota|KB hard limit| grace".split('|')
data = ["/media/Stuff", 58384, 5242880, 0, None]
print '|'.join(HEADER)
print '|'.join("%*s" % (width, val) for width, val in zip(map(len,HEADER), data))

输出

DeviceName   |KB used|KB quota|KB hard limit| grace
 /media/Stuff|  58384| 5242880|            0|  None

答案 2 :(得分:1)

 '%s'.rjust(5)
假设文字%s是你的字符串,

将空格放入。你将用另一个未知长度的字符串替换它,所以你不能在替换之前证明是正确的。

但是,您不希望自己明确地.rjust()所有内容,因为该功能内置于替换引擎中。只需将字段宽度放在%s之间。

您可以通过测量标题中字符串的长度来动态构建格式字符串。格式化时,使用%%生成文字%符号;因此,'%%%ds' % 10变为'%10s',这将产生10的字段宽度。

因此,像:

format_string = ' '.join('%%%ds' % len(h) for h in HEADER)
print ' '.join(HEADER)
for entry in data: print format_string % entry

答案 3 :(得分:0)

使用精度格式化字符串:

print ' '.join("%5.5s" % s for s in HEADER)

或者,切片rjust结果:

print ' '.join(s.rjust(5)[:5] for s in HEADER)