python 将颜色打印到控制台时出现间距问题

python spacing issue when printing color to console

我正在尝试将彩色 headers 打印到控制台,但它似乎弄乱了间距。为什么它会忽略间距?

yellow = lambda text: '3[0;33m' + text + '3[0m'
print(f"{yellow('Header1'):<15} {'Header2':<15} Header2")

输出:

Header1 Header2         Header2

因为它使用lambda函数返回的文本来计算字符串长度:

在:

len(yellow('Header1'))

输出:

18

显然,在将字符解释为颜色信息之前评估添加空格的长度。我认为这是有道理的,因为颜色可能仅在以后由 sys.stdout.

解释

例如,如果您执行以下操作,您将获得一些空间:

在:

yellow = lambda text: '3[0;33m' + text + '3[0m'^M
print(f"{yellow('Header1'):<20} {'Header2':<15} Header2")

输出:

Header1   Header2         Header2

问题是您为黄色添加的填充。这是格式字符串在第 2 行转换成的内容:

初始版本

print(f"{yellow('Header1'):<15} {'Header2':<15} Header2")

黄色('Header1')被评估后

print(f"{'3[0;33mHeader13[0m':<15} {'Header2':<15} Header2")

可以看到长度超过了15个字符。打印语句后,您的控制台将转换特殊字符并将 Header1 更改为黄色文本。要解决此问题,您可以在 {'Header1':<15} 格式之外添加黄色填充。

类似这样的方法可行:

print(yellow(f'{'Header1':<15}') + f' {'Header2':<15} Header2")