如何在终端中将Python输出的文本对齐成列?

8 投票
3 回答
17276 浏览
提问于 2025-04-15 13:58

我在终端窗口里打印一些脚本的值,像这样:

for i in items:
    print "Name: %s Price: %d" % (i.name, i.price)

我该怎么把这些值对齐成列呢?

3 个回答

1

你还可以使用 rjust() 和 ljust() 这两个方法来处理字符串对象。

9

正如Vinay所说,使用字符串格式说明符。

如果你不知道最大长度,可以通过再遍历一遍列表来找出这些长度:

maxn, maxp = 0, 0
for item in items:
    maxn = max(maxn, len(item.name))
    maxp = max(maxp, len(str(item.price)))

然后用'*'代替数字,并把计算出的宽度作为参数提供。

for item in items:
    print "Name: %-*s Price: %*d" % (maxn, item.name, maxp, item.price)
18

如果你知道两个列中数据的最大长度,那么你可以使用格式说明符。比如说,如果名字最多20个字符长,而价格最多10个字符,你可以这样做:

print "Name: %-20s Price: %10d" % (i.name, i.price)

这样比使用制表符要好,因为在某些情况下,制表符可能对不齐(例如,如果一个名字比另一个长很多)。

如果有些名字放不下,那么你可以用.格式说明符来截断数据。比如说,使用“%-20.20s”来格式化名字,就可以把超过20个字符的名字截断,适应20个字符的列。

撰写回答