如何以一致的格式对齐输出

时间:2014-03-13 08:33:22

标签: python

正如您可以看到前4列正确对齐, 但是当我最后添加LOCKED列时,它的格式非常奇怪。

这是我的代码

    show_camera_in_command = "\t".join(camera.split(",,,")[0:-1])
    if locked:
        p_yel(show_camera_in_command+"\t\tLOCKED")
    else:
        print(show_camera_in_command)

输出

3 个答案:

答案 0 :(得分:0)

制表符强制输出到下一个“制表位”。将制表符视为8个空格。由于像SF8172这样的数据是6个字符,所以frist'\ t'将输出推送到下一个“8空格”位置,第二个推送到另外8个空格。像NDB301ND8301这样的输出是12个空格,因此您已经通过了第一个选项卡设置上一个输出线的位置。因此,您可以移动一个额外的“制表位”。类似地,VASTVVK_Station1甚至更长,并且通过该tab'tab停止',因此它在输出线上甚至更远。

输出完全按照您的指定。其他列都在同一个标​​签区域内,因此它们不会显示变化。

您可以使用格式或计算所需的制表符数量。比如

i = (64 - len(field))//8

现在在输出规范中输出'\ t'* i。

答案 1 :(得分:0)

使用python的格式。您可以看到示例here

答案 2 :(得分:0)

问题来自于具有一种标识符的列具有大小变量。您需要先检查最长的字符串,然后根据其大小添加所需的相关选项卡。

您可以使用简单的公式计算标识符和LOCKED之间插入的标签数(标签等于8个空格):

# Just make a simple relevant sample with different size
>>> lst = ["a", "aaaa", "aaaaaaaaaaaaaaa"]
>>> for a in lst:
...     print "%s\tLOCKED" % a
...
a       LOCKED
aaaa    LOCKED
aaaaaaaaaaaaaaa LOCKED  # Here we can see the problem

>>> max_size = len(lst[-1])
>>> for a in lst:
...     print "%s%sLOCKED" % (a, "\t" * ((max_size - len(a))/8 + 1))
...
a               LOCKED
aaaa            LOCKED
aaaaaaaaaaaaaaa LOCKED

为简单起见,您可以在两条说明中分隔print语句:

nb_tabs = (max_size - len(a))/8 + 1
print "%s%sLOCKED" % (a, "\t" * nb_tabs)

您当然需要计算最大尺寸,这可以通过对size = max([len(x) for x in lst])等数据的简单迭代来完成。