正如您可以看到前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)
输出
答案 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])
等数据的简单迭代来完成。