gpt4 book ai didi

Python 的 `str.format()` 、填充字符和 ANSI 颜色

转载 作者:太空狗 更新时间:2023-10-29 20:54:29 29 4
gpt4 key购买 nike

在 Python 2 中,我使用 str.format() 来对齐我正在打印到终端的一堆文本列。基本上,它是一个表格,但我没有打印任何边框或任何东西——它只是文本行,与列对齐。

  • 没有颜色调整,一切都按预期打印。
  • 如果我用 ANSI 颜色代码包裹一整行(即一个 print 语句),所有内容都会按预期打印。
  • 但是:如果我试图让一行中的每一列都具有不同的颜色,对齐就会被抛出。从技术上讲,对齐方式 得到了保留; 填充字符(空格)未按要求打印;事实上,填充字符似乎已完全删除。

我已经用 colorama 验证了同样的问题和 xtermcolor .结果是一样的。因此,我确定问题与 str.format() 不能很好地处理字符串中间的 ANSI 转义序列有关。

但是我不知道该怎么办! :( 我真的很想知道这个问题是否有任何解决方法。

颜色和对齐是提高可读性的有力工具,而可读性是软件可用性的重要组成部分。如果无需手动对齐每一列文本即可完成这对我来说意义重大。

帮助不大? ☺

最佳答案

这是一个非常迟到的答案,留给任何在努力使用内置 ANSI 颜色代码格式化文本时找到此页面的人作为面包屑。

byoungb's comment关于对预着色文本的长度做出填充决定是完全正确的。但如果您已经有彩色文本,这里有一个解决方法:

查看我的 ansiwrap PyPI 上的模块。它的主要目的是为 ANSI 彩色文本提供 textwrap,但它也导出 ansilen() 告诉你“如果这个字符串没有” t 是否包含 ANSI 控制代码?”它在对预着色文本进行格式设置、列宽和换行决策时非常有用。添加 width - ansilen(s) 空格到 s 的末尾或开始以左(或分别右)对齐 s 在一列你想要的宽度。例如:

def ansi_ljust(s, width):
needed = width - ansilen(s)
if needed > 0:
return s + ' ' * needed
else:
return s

此外,如果您需要在某个时候拆分、截断或合并彩色文本,您会发现 ANSI 的状态特性使这成为一件苦差事。您可能会发现 ansi_terminate_lines() 很有帮助;它“修补”了一个子字符串列表,使每个子字符串都有独立的、自立的 ANSI 代码,其效果与原始字符串相同。

最新版本ansicolors还包含 ansilen() 的等效实现。

关于Python 的 `str.format()` 、填充字符和 ANSI 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14140756/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com