在Python2中,我使用str.format()
将要打印的文本列对齐到终端。基本上,这是一个表格,但我不打印任何边框或任何东西,只是一行行文本,对齐成列。在
print
语句),则所有内容都将按预期打印。在我已经用^{str.format()
不能很好地处理字符串中间的ANSI转义序列有关。在
但我不知道该怎么办!:(我真的很想知道有没有解决这个问题的方法。在
颜色和对齐是提高可读性的有力工具,可读性是软件可用性的重要组成部分。如果不需要手动对齐每一列文本就可以实现这一点,对我来说意义重大。在
帮不了什么忙?☺ 在
这是一个非常晚的答案,留给任何人面包屑谁找到这一页,而挣扎着与内置的ANSI色码文本格式。在
byoungb's comment关于对预着色文本的长度进行填充决策是完全正确的。但如果您已经有彩色文本,这里有一个解决方法:
请参阅PyPI上的ansiwrap模块。它的主要目的是为ANSI彩色文本提供
textwrap
,但是它还导出ansilen()
,它告诉您“如果这个字符串不包含ANSI控制代码,它会有多长?”它在对预着色文本进行格式化、列宽和包装决策时非常有用。将width - ansilen(s)
空格添加到s
的结尾或开头,向左(或分别向右)对齐s
到您想要的width
列中。E、 g.:另外,如果您需要在某一点上拆分、截断或组合彩色文本,您会发现ANSI的有状态特性使其成为一件麻烦事。您可能会发现
ansi_terminate_lines()
很有帮助;它“修补”了一系列子字符串,这样每个子字符串都有独立的、独立的ANSI代码,其效果与原始字符串相同。在最新版本的ansicolors还包含
ansilen()
的等效实现。在Python不区分“普通”字符和ANSI颜色代码,后者也是终端解释的字符。在
换句话说,将
'\x1b[92m'
打印到终端可能会改变终端文本的颜色,Python认为这只是一组5个字符。如果改为使用print repr(line)
,python将打印字符串文本形式,包括对非ASCII可打印字符使用转义码(因此ESC-ASCII代码27显示为\x1b
),以查看添加了多少字符。在您需要手动调整列对齐方式以允许这些额外的字符。在
如果没有你的实际代码,我们很难帮助你。在
相关问题 更多 >
编程相关推荐