1

我在查找有关如何执行此操作的良好解释时遇到了一些麻烦,因此将我指向正确的方向将有助于解决以下问题。

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

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 只是在字符串右侧填充空格。有没有办法打印一个字符串,使其恰好占据一定的宽度,如果字符串的长度不足以适应宽度,那么只需用空格填充它?

PS我仅限于python 2.4,这意味着我不能使用python 2.7的格式。

4

4 回答 4

3

你可以使用'%*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
于 2011-11-02T18:13:37.470 回答
2

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

>>> "%-5s" % 'sss'
'sss  '
于 2011-11-02T17:59:57.407 回答
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
于 2011-11-02T18:06:08.847 回答
0

精确格式化字符串:

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

或者,切片rjust结果:

print ' '.join(s.rjust(5)[:5] for s in HEADER)
于 2011-11-02T18:05:10.393 回答