使用制表符格式化空白

时间:2015-02-05 06:09:37

标签: python python-3.x string-formatting

奇怪的问题在这里。我正在处理一些预定义的输出,这些输出是制表符分隔的,但具有不同的制表符大小。因此,例如,数据看起来像这样:

a:    b,c
qes:  d,e

除了\ t字符而不是冒号和字符之间的空格。我试图使用python format命令重现这种类型的输出以使用遗留代码,但似乎只能在使用空格而不是\ t字符作为填充时使其工作。这是我的格式命令的草图:

'{:>8}:{:>5},{:}'.format(foo, bar, do)

同样,我已经尝试将\ t设置为我的填充字符,但它将其视为一个字符,并且只是放入与空格相同数量的标签 - 这没有帮助。

2 个答案:

答案 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