[python]print文で色をつけてみよう

ターミナルの出力結果に色を付けると非常に見やすくなります。
 色をつける方法はエスケープシーケンスを使って、「色を付けるコード」+文章+「色付け終了コード」をprint文で出力するだけです。
 エスケープシーケンスとは文字以外の制御するためのコードです。エスケープシーケンスは開始を表す「\033[」と終了を表す「m」の間の文字で制御する内容を表します。/033はESCキーを表し、033(8進数)とx1b(16進数)は同じなので、エスケープシーケンスの開始を「\x1b[」にしても同じことになります。
 文字色を変えるモジュールもあるのでそれを使えば出来ますが、使わなくても簡単にできるのでここではモジュールを使わない方法を紹介します

簡単な例

簡単な例をしてみましょう。

#!/usr/bin/env python3

print('\033[31m'+'赤色'+'\033[0m')
#[出力]赤色←赤色で表示されます

print('\033[32m'+'緑色'+'\033[0m')
#[出力]緑色←緑色で表示されます

print('\033[34m'+'緑色'+'\033[0m')
#[出力]青色←青色で表示されます

 赤色にするときは赤色を示す「\033[31m」のあとに文字を出力して、終わりにリセットコードの「\033[0m」を出力します。リセットコードを忘れるとその後の出力全てが変更されますので忘れないようにしてください。

変数を使ってコードをわかりやすくする

 先ほどの例ではエスケープシーケンスを直接記入していて見にくいコードになっていました。実際に使うときは以下のようにすると見やすくなります。

#!/usr/bin/env python3

class Color:
	BLACK          = '\033[30m'#(文字)黒
	RED            = '\033[31m'#(文字)赤
	GREEN          = '\033[32m'#(文字)緑
	YELLOW         = '\033[33m'#(文字)黄
	BLUE           = '\033[34m'#(文字)青
	MAGENTA        = '\033[35m'#(文字)マゼンタ
	CYAN           = '\033[36m'#(文字)シアン
	WHITE          = '\033[37m'#(文字)白
	COLOR_DEFAULT  = '\033[39m'#文字色をデフォルトに戻す
	BOLD           = '\033[1m'#太字
	UNDERLINE      = '\033[4m'#下線
	INVISIBLE      = '\033[08m'#不可視
	REVERCE        = '\033[07m'#文字色と背景色を反転
	BG_BLACK       = '\033[40m'#(背景)黒
	BG_RED         = '\033[41m'#(背景)赤
	BG_GREEN       = '\033[42m'#(背景)緑
	BG_YELLOW      = '\033[43m'#(背景)黄
	BG_BLUE        = '\033[44m'#(背景)青
	BG_MAGENTA     = '\033[45m'#(背景)マゼンタ
	BG_CYAN        = '\033[46m'#(背景)シアン
	BG_WHITE       = '\033[47m'#(背景)白
	BG_DEFAULT     = '\033[49m'#背景色をデフォルトに戻す
	RESET          = '\033[0m'#全てリセット

print(f'黒:{Color.BLACK}●ABC{Color.RESET}')
print(f'赤:{Color.RED}●ABC{Color.RESET}')
print(f'緑:{Color.GREEN}●ABC{Color.RESET}')
print(f'黄:{Color.YELLOW}●ABC{Color.RESET}')
print(f'青:{Color.BLUE}●ABC{Color.RESET}')
print(f'マゼンタ:{Color.MAGENTA}●ABC{Color.RESET}')
print(f'シアン:{Color.CYAN}●ABC{Color.RESET}')
print(f'白:{Color.WHITE}●ABC{Color.RESET}')
print(f'下線:{Color.UNDERLINE}●ABC{Color.RESET}')
print(f'太字:{Color.BOLD}●ABC{Color.RESET}')
print(f'不可視:{Color.INVISIBLE}●ABC{Color.RESET}')
print(f'反転:{Color.REVERCE}●ABC{Color.RESET}')
print(f'背景黒:{Color.BG_BLACK}●ABC{Color.RESET}')
print(f'背景赤:{Color.BG_RED}●ABC{Color.RESET}')
print(f'背景緑:{Color.BG_GREEN}●ABC{Color.RESET}')
print(f'背景黄:{Color.BG_YELLOW}●ABC{Color.RESET}')
print(f'背景青:{Color.BG_BLUE}●ABC{Color.RESET}')
print(f'背景マゼンタ:{Color.BG_MAGENTA}●ABC{Color.RESET}')
print(f'背景シアン:{Color.BG_CYAN}●ABC{Color.RESET}')
print(f'背景白:{Color.BG_WHITE}●ABC{Color.RESET}')
#文字色と背景色を変える
print(f'文字赤+背景緑:{Color.RED}{Color.BG_GREEN}●ABC{Color.RESET}')

もっと細かく色を指定

もっと色を細かく指定する場合は以下のようにします。

#!/usr/bin/env python3

#\033[38;2;r;g;bmで任意の文字色を指定出来る。r,g,bは0〜255(256^3色)
print(f"文字任意:\033[38;2;255;0;255m●ABC\033[0m");
										
#\033[38;5;nmで任意の文字色を指定出来る。nは0〜255(256色)
print(f"文字任意:\033[38;5;40m●ABC\033[0m");
									
#\033[48;2;r;g;bmで任意の背景色を指定出来る。r,g,bは0〜255(256^3色)
print(f"背景任意:\033[48;2;80;0;80m●ABC\033[0m");

#\033[48;5;nmで任意の背景色を指定出来る。nは0〜255(256色)
print(f"背景任意:\033[48;5;30m●ABC\033[0m");