使用制表符格式化空格
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
奇怪的问题。我正在处理一些制表符分隔的预定义输出,但制表符大小不同。因此,例如,数据如下所示:
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