我一直在寻找关于如何做到这一点的一个很好的解释,所以指向正确的方向将有助于解决以下问题。
我需要以漂亮的格式打印出标题以及数据,不幸的是发生了什么 如下所示。
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中的格式。
答案 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)