15

Python 2 ではstr.format()、端末に出力する一連のテキスト列を揃えるために使用しています。基本的に、これは表ですが、罫線などは印刷していません。列に並べられた単なるテキストの行です。

  • 色いじりなしで、すべてが期待どおりに印刷されます。
  • 行全体 (つまり、1 つのprintステートメント) を ANSI カラー コードでラップすると、すべてが期待どおりに印刷されます。
  • ただし、行内の各列を異なる色にしようとすると、配置が崩れます。技術的には、配置は維持されます。希望どおりに印刷されないのは、塗りつぶし文字(スペース) です。実際、塗りつぶし文字は完全に削除されているように見えます。

と の両方coloramaで同じ問題を確認しましたxtermcolor。結果は同じでした。したがって、この問題はstr.format()、文字列の途中で ANSI エスケープ シーケンスをうまく処理できないことに関係していると確信しています。

しかし、私はそれについて何をすべきかわかりません!:( この問題の回避策があるかどうかを知りたいです。

色と配置は読みやすさを改善するための強力なツールであり、読みやすさはソフトウェアの使いやすさの重要な部分です。テキストの各列を手動で揃えることなくこれを達成できれば、私にとって大きな意味があります。

少し助けて?☺

4

2 に答える 2

7

Python は、「通常の」文字と、ターミナルが解釈する文字でもある ANSI カラー コードを区別しません。

つまり、'\x1b[92m'端末に出力すると端末のテキストの色が変わる可能性がありますが、Python はそれを 5 文字のセットとしてしか認識しません。代わりに使用print repr(line)すると、Python は代わりに文字列リテラル形式を出力します。これには、非 ASCII 印刷可能文字のエスケープ コードの使用が含まれます (そのため、ESC ASCII コード 27 は として表示されます\x1b) 追加された数を確認します。

これらの余分な文字を許可するには、列の配置を手動で調整する必要があります。

ただし、実際のコードがなければ、私たちがお手伝いすることは困難です。

于 2013-01-03T14:25:23.100 に答える