使用制表符格式化空格

Formatting whitespace with tabs

奇怪的问题。我正在处理一些制表符分隔的预定义输出,但制表符大小不同。因此,例如,数据如下所示:

a:    b,c
qes:  d,e

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

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

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

所以,我认为这有两个部分:如何在目标系统中显示选项卡,以及如何在格式字符串中获得正确数量的 space。

正如 Bardi Harborow 评论的那样,显示制表符的常见约定是“每个制表符 8 spaces”,这意味着一个制表符可以替换 最多 8字符价值的文本。但是,这通常可以在每个程序的基础上进行配置。如果我只是在你的格式字符串中使用一个选项卡,在一个有 8-space 选项卡的系统上,例如 运行 来自我的 Windows 命令行的脚本,它看起来像这样:

s:      b,c
longer: b,c

但是有 4-space 个标签,它看起来像这样:

s:  b,c
longer: b,c

因此,对于您的问题,最简单的答案是,假设 none 个 foo 个字符的长度超过一个制表符 ,您可以使用格式字符串:'{}:\t{},{}'.

您是否有关于您 运行 脚本所在系统的更多信息?这可能有助于将对话引向更有用的方向。

我知道您这样做是出于遗留原因,但作为旁注,整个 'tabs can be displayed differently on different machines' 是人们使用 space 对齐格式的原因之一。

备选方案:计算标签数量:

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