Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonを使ってLinuxターミナルでテキストを装飾表示する方法


Linuxターミナルにおけるテキスト装飾の基本

本記事では、Pythonを使ってLinuxターミナル上に整形(装飾)されたテキストを出力する方法を解説します。フォーマット機能を活用すれば、文字色やスタイルだけでなく、点滅といった特殊な視覚効果も自由に付与できます。

Linuxターミナルは、ANSIエスケープシーケンスと呼ばれる制御コードに対応しており、これによって文字装飾やカラー表示などが実現できます。仕組みとしては、テキストの中に特定のバイト列を埋め込み、ターミナルがそれを解釈するタイミングで指定した書式が反映されるというものです。

ANSIエスケープシーケンスの基本構文は次のとおりです。

\x1b[A;B;C
  • A: テキストの装飾スタイル
  • B: 文字色(前景色)
  • C: 背景色

A、B、Cにはそれぞれ定義済みの値が用意されています。対応表は以下をご覧ください。

テキスト装飾スタイル(A)

スタイル
1太字(Bold)
2薄字(Faint)
3イタリック(Italic)
4下線(Underline)
5点滅(Blinking)
6高速点滅(Fast Blinking)
7反転表示(Reverse)
8非表示(Hide)
9取り消し線(Strikethrough)

文字色・背景色コード(BおよびC)

Bの値(文字色)Cの値(背景色)
3040黒(Black)
3141赤(Red)
3242緑(Green)
3343黄(Yellow)
3444青(Blue)
3545マゼンタ(Magenta)
3646シアン(Cyan)
3747白(White)

サンプルコード

以下は、ターミナルの装飾設定を簡単に管理できるようまとめたPythonクラスの例です。

class Terminal_Format:
   Color_Code = {'black': 0, 'red': 1, 'green': 2, 'yellow': 3, 'blue': 4, 'magenta': 5, 'cyan': 6, 'white': 7}
   Format_Code = {'bold': 1, 'faint': 2, 'italic': 3, 'underline': 4, 'blinking': 5, 'fast_blinking': 6, 'reverse': 7, 'hide': 8, 'strikethrough': 9}

   def __init__(self):
      # 最初にターミナルのスタイルをリセット
      self.reset_terminal()

   def reset_terminal(self):
      # 各プロパティを初期化
      self.property = {'text_style': None, 'fg_color': None, 'bg_color': None}
      return self

   def config(self, style=None, fg_col=None, bg_col=None):
      # すべてのプロパティをまとめて設定
      return self.reset_terminal().text_style(style).foreground(fg_col).background(bg_col)

   def text_style(self, style):
      # テキストスタイルを設定
      if style in self.Format_Code.keys():
         self.property['text_style'] = self.Format_Code[style]
      return self

   def foreground(self, fg_col):
      # 前景色を設定
      if fg_col in self.Color_Code.keys():
         self.property['fg_color'] = 30 + self.Color_Code[fg_col]
      return self

   def background(self, bg_col):
      # 背景色を設定
      if bg_col in self.Color_Code.keys():
         self.property['bg_color'] = 40 + self.Color_Code[bg_col]
      return self

   def format_terminal(self, string):
      temp = [self.property['text_style'], self.property['fg_color'], self.property['bg_color']]
      temp = [str(x) for x in temp if x is not None]
      # 整形済みの文字列を返す
      return '\x1b[%sm%s\x1b[0m' % (';'.join(temp), string) if temp else string

   def output(self, my_str):
      print(self.format_terminal(my_str))

使い方と実行結果

このクラスは、たとえば次のように呼び出して使います。

from terminal_format import Terminal_Format

term = Terminal_Format()
term.config(style='bold', fg_col='red', bg_col='white')
term.output('Hello, World!')

上記を実行すると、「Hello, World!」が白背景の上に赤い太字で表示されます。引数に渡すスタイル名や色名を変えることで、多彩な装飾パターンを手軽に試すことができます。

スクリプトの実行手順

スクリプトを実行するには、まずターミナル上でPythonシェル(対話モード)を起動し、そこからスクリプトファイル内のクラスをインポートします。

クラスのインスタンスを作成したら、config()メソッドで希望のスタイルを設定します。ターミナルの表示設定を変更したい場合は、その都度config()を呼び出して再設定してください。


  1. Pythonで作るコンウェイのライフゲーム:基本ルールと実装方法を徹底解説

    1970年頃、イギリスの数学者ジョン・ホートン・コンウェイによって考案された「ライフゲーム(Game of Life)」は、生物の集団が見せるカオス的でありながらも秩序のある増殖の様子を表現する、シンプルな一連のルールです。盤面は「生存」セルと「死亡」セルで構成される二次元グリッドとして表現されます。 ライフゲームの基本ルール 過密(Overpopulation):あるセルの周囲に3つより多い生存セルが存在する場合、そのセルは次の世代で死滅します(OFF)。 維持(Static):周囲に2つまたは3つの生存セルが存在する場合、そのセルは次の世代でも生存し続けます(ON)。 過疎(Under

  2. PythonでのCX_Freezeの使い方:スクリプトを実行ファイル(EXE)に変換する方法

    はじめに 何か面白いものを作りたいという欲求は人間の本能であり、完成したものは誰かに共有したくなるものです。Pythonでもその願いを叶えられます。ただし、作成したPythonスクリプトをそのまま共有するには、相手のマシンにも同じバージョンのPythonと、プログラムで使用しているすべてのモジュールがインストールされている必要があります。 そこで役立つのがCX_Freezeです。このツールを使えば、Pythonがインストールされていない環境でも動作するスタンドアロンの実行ファイル(.exe)を作成できます。 CX_Freezeのインストール まず、コマンドプロンプトで以下のコマンドを実行し、c