如何将python中的文本排列到终端中的列中?

Hob*_*use 8 python

我正在终端窗口中的脚本中打印出一些值,如下所示:

for i in items:
    print "Name: %s Price: %d" % (i.name, i.price)
Run Code Online (Sandbox Code Playgroud)

如何将这些排列成列?

Vin*_*jip 18

如果您知道两列中的最大数据长度,则可以使用格式限定符.例如,如果名称最多20个字符长,价格将适合10个字符,您可以这样做

print "Name: %-20s Price: %10d" % (i.name, i.price)
Run Code Online (Sandbox Code Playgroud)

这比使用制表符更好,因为制表符在某些情况下不会排列(例如,如果一个名称比另一个名称长一点).

如果某些名称不适合可用空间,则可以使用.格式限定符截断数据.例如,对名称格式使用"%-20.20s"将截断任何更长的名称以适合20个字符的列.


Joh*_*uhy 9

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

如果您不知道最大长度,可以通过列表中的额外传递找到它们:

maxn, maxp = 0, 0
for item in items:
    maxn = max(maxn, len(item.name))
    maxp = max(maxp, len(str(item.price)))
Run Code Online (Sandbox Code Playgroud)

然后使用'*'而不是数字,并提供计算的宽度作为参数.

for item in items:
    print "Name: %-*s Price: %*d" % (maxn, item.name, maxp, item.price)
Run Code Online (Sandbox Code Playgroud)