在Python 2中,我使用str.format()将要打印的一堆文本列对齐到终端。基本上,它是一张 table ,但我不会打印任何边框或任何东西,它只是一行文本,并按列对齐。

  • 没有弄乱颜色,所有内容均按预期打印。
  • 如果我用ANSI颜色代码包装整行(即,一个print语句),则所有内容都会按预期打印。
  • 但是:如果我尝试使行中的每一列都具有不同的颜色,则对齐方式将被抛出。从技术上讲,会保留对齐方式;填充字符(空格)没有按要求打印;实际上,填充字符似乎已被完全删除。

  • 我已经验证了 colorama xtermcolor 的相同问题。结果是相同的。因此,我敢肯定,这与str.format()与字符串中间的ANSI转义序列不能很好地发挥作用有关。

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

    颜色和对齐方式是用于提高可读性的强大工具,而可读性是软件可用性的重要组成部分。如果可以在不手动对齐文本的每一列的情况下完成此操作,这对我来说意义重大。

    帮不上忙吗? ☺

    最佳答案

    Python不会区分“普通”字符和ANSI颜色代码,后者也是终端解释的字符。

    换句话说,在终端上打印'\x1b[92m'可能会改变终端文本的颜色,Python认为这只是一组5个字符。如果改用print repr(line),则python将改为打印字符串文字形式,包括对非ASCII可打印字符使用转义码(因此ESC ASCII代码27显示为\x1b)以查看已添加的数量。

    您需要手动调整列的对齐方式,以允许这些额外的字符。

    如果没有您的实际代码,我们很难为您提供帮助。

    10-07 13:15
    查看更多