Python在将颜色打印到控制台时存在间距问题。

3

我想将带有颜色的标题打印到控制台,但似乎会影响间距。为什么它会忽略间距?

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

输出:

标题1 标题2 标题3
2个回答

0
因为它使用从lambda函数返回的文本来计算字符串的长度: 输入:
len(yellow('Header1'))

输出:

18

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

例如,如果您执行以下操作,则会返回一些空格:

输入:

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

输出:

Header1   Header2         Header2

0
问题出在您为黄色添加的填充上。以下是第2行转换为的格式字符串:

初始版本

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

在计算了 yellow('Header1') 之后

print(f"{'\033[0;33mHeader1\033[0m':<15} {'Header2':<15} Header2")

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

类似以下内容可能有效:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接