奇怪的问题在这里。我正在处理一些预定义的输出,这些输出是制表符分隔的,但具有不同的制表符大小。因此,例如,数据看起来像这样:
a: b,c
qes: d,e
除了\ t字符而不是冒号和字符之间的空格。我试图使用python format命令重现这种类型的输出以使用遗留代码,但似乎只能在使用空格而不是\ t字符作为填充时使其工作。这是我的格式命令的草图:
'{:>8}:{:>5},{:}'.format(foo, bar, do)
同样,我已经尝试将\ t设置为我的填充字符,但它将其视为一个字符,并且只是放入与空格相同数量的标签 - 这没有帮助。
答案 0 :(得分:3)
所以,我认为这有两个部分:如何在目标系统中显示标签,以及如何在格式字符串中获得适当的空间。
正如Bardi Harborow评论的那样,显示标签的常见惯例是每个标签有8个空格'这意味着一个标签字符可以替换最多 8个字符的文本。但是,这通常可以基于每个程序进行配置。如果我只在格式字符串中使用单个选项卡,在具有8个空格选项卡的系统上,例如从我的Windows命令行运行脚本,它看起来像这样:
s: b,c
longer: b,c
但是有4个空格的标签,它看起来像这样:
s: b,c
longer: b,c
因此,对于您的问题最简单的答案,假设您的foo
个字符都不超过一个标签,您只需使用格式字符串:{{1} }。
您是否有关于运行脚本的系统的更多信息?这可能有助于引导谈话朝着更有用的方向发展。
我知道您是出于遗留原因而这样做,但作为旁注,这整个标签可以在不同的机器上以不同的方式显示'是人们使用空间对齐格式的原因之一。
答案 1 :(得分:0)
替代解决方案:计算标签的数量:
from math import ceil
TAB_LENGTH = 4
COLUMN_LENGTH = 8
test_array = [['a', 'b', 'c'], ['qes', 'd', 'e']]
for row in test_array:
empty_space = (COLUMN_LENGTH - len(row[0] + ':'))
num_of_tabs = int(ceil(float(empty_space) / TAB_LENGTH))
output = row[0] + ':' + ('\t' * num_of_tabs) + row[1] + ',' + row[2]
print output