8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Python】print出力で特定のキーワードの文字色や背景色を変える

Last updated at Posted at 2020-03-15

この記事の目的

Pythonで以下の様に, 特定の単語をハイライトして出力するための関数を作成しました.
image.png
ページの最後にコード一覧があります.

解説

必要なライブラリはこれだけです.

import re

まず, 文字色や背景色を変更するための辞書を作成します.
今回は"yellow"なら黄色の背景色, "red"なら赤文字といったように設定してみました.

color_dic = {'yellow':'\033[43m', 'red':'\033[31m', 'blue':'\033[34m', 'end':'\033[0m'}

次にハイライトしたいキーワードを設定します. 今回は都道府県名をキーワードに設定しました.

keyword = ["東京都", "千葉県", "埼玉県", "神奈川県", ...]

上で設定したキーワードをfor文で順番に検索していくことになるのですが, ここでリストの並び順が重要になってきます. というのもキーワードによっては, 別のキーワードの部分文字列になっている可能性があるためです. 例えば, 市区町村の検索で

keyword = [... , "津市", "大津市", ...]

となっていた場合, 単純に左から単語を検索してヒットしたものに色を付けると以下のようになります.
image.png

そこで解決策として, リスト内の単語を文字数の長いものから順に並べます.
すると「大津市」を先に検索することになるので, 上のような問題は起きません.
以下がそのコードです.

#keyword = sorted(keyword, key=lambda x:len(x), reverse=True)
#コメントでより良い書き方をご指摘いただきました.
keyword.sort(key=len, reverse=True) 

最後に, 出力するテキストと, キーワード, 色指定の情報を受けて, 出力を行う関数を作成します.

def print_hl(text, keyword, color="yellow"):
    for kw in keyword:
        bef = kw
        aft = color_dic[color] + kw + color_dic["end"]
        text = re.sub(bef, aft, text)
    print(text)

実行例は以下の通りです.

text = "私は東京都に住んでいる"

print_hl(text, keyword)

image.png

以上!

コード一覧

import re

color_dic = {'yellow':'\033[43m', 'red':'\033[31m', 'blue':'\033[34m', 'end':'\033[0m'}

def print_hl(text, keyword, color="yellow"):
    for kw in keyword:
        bef = kw
        aft = color_dic[color] + kw + color_dic["end"]
        text = re.sub(bef, aft, text)
    print(text)

keyword = ["東京都", "千葉県", "埼玉県", "神奈川県"]
keyword.sort(key=len, reverse=True)
text = "私は東京都に住んでいる"

print_hl(text, keyword)

参考

コンソールに色付きの出力をする方法

8
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?