2016-09-12 10 views
0

私はすでにPythonとColoramaパッケージでテキストを色付けする方法について質問を読んだが、私が探していたものを見つけられなかった。Pythonでテキスト内に与えられた単語に色付けする

私はいくつかの生のテキストを持っている:

不可能と考え招待彼の男性器の鋸が不快祝いました。休息をとって、次に近くに多くの種類を設定しなければならない。彼は絶妙なミドルトンの説明を続けた。若いウッディの声の時間は彼女が平等だと思っている。私はgoodの単語が緑色で表示され、badの単語が赤で表示されるように、端末にそのテキストを印刷したい

good = ["instrument", "kind", "exquisite", "young"] 
bad = ["impossible", "unpleasant", "woody"] 

と言葉の二つのリスト。

私はcoloramaを使用することができ、各単語を順番にチェックし、この単語のprint文を作成することができますが、良い解決策のようには聞こえません。それを行う効果的な方法はありますか?これは動作するはず

+0

可能な複製http://stackoverflow.com/questions/287871/print-in-terminal-with-colors-using-python – kjaquier

+0

あなたはすべての単語をチェックする必要があります。 –

+1

なぜ各単語がどちらか一方に悪い解決策があるかどうかを順番に調べていますか?私はそれが実際には唯一の解決策だと思う。 – Julius

答えて

1

ここにマップを使用したソリューションがあります。/

from colorama import Fore, Style 

def colourise(s, good, bad): 
    if s in good: 
     return Fore.RED + s 
    elif s in bad: 
     return Fore.GREEN + s 
    else: 
     return Style.RESET_ALL + s 

text = "Impossible considered invitation him men instrument saw celebrated unpleasant. Put rest and must set kind next many near nay. He exquisite continued explained middleton am. Voice hours young woody has she think equal." 

good = ["instrument", "kind", "exquisite", "young"] 
bad = ["impossible", "unpleasant", "woody"] 
print(' '.join(map(lambda s: colourise(s, good, bad),text.split()))) 

または代わりに:それは何も速く、従来のループよりも間違いなくません

print(' '.join(colourise(s, good, bad) for s in text.split())) 

番目のバージョンは、おそらくより良いです。

+0

(これはおそらくまだ*がループしているからです...あなたはループなしでこれを行うことはできません) – poke

+0

@poke私はそれを主張したことはありません...それは、従来の 'for i in ... ' – gowrath

+0

@gowrath色のパラメータとして良いか悪いかを入れたいのですが? –

2

from colorama import Fore, Style 

for word in text.split(' '): 
    if word in good: 
     print Fore.red + word 
    elif word in bad: 
     print Fore.green + word 
    else: 
     print Style.RESET_ALL + word 
1

を(それはおそらく少し遅いですが)あなたは、常にこの操作を行うことができます:

from colorama import Fore 

for word in good: 
    text = text.replace(word, Fore.GREEN+word) 

for word in bad: 
    text = text.replace(word, Fore.RED+word) 

print(text) 

re.subはまた、あなたがおそらくない、特に以来、ここに面白いかもしれませんr'\bword\b'を使用できるように、他の単語の中にある単語を置き換えたい

関連する問題