我已经阅读了有关如何使用Python和Colorama包着色文本的问题,但我找不到我想要的内容。
我有一些原始文字:
不可能考虑邀请他的男人仪器看到庆祝不愉快。放下休息,必须在下面附近设置好几个。他精致的继续解释了米德尔顿。她认为年轻木质的声音小时是平等的。
两个单词列表:
good = ["instrument", "kind", "exquisite", "young"]
bad = ["impossible", "unpleasant", "woody"]
我想在终端中打印该文字,以便good
中的文字显示为绿色,bad
中的文字显示为红色。
我知道我可以使用colorama,按顺序检查每个单词并为这个单词做一个打印声明,但这听起来不是一个好的解决方案。有没有一种有效的方法呢?
答案 0 :(得分: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 :(得分: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'
。
答案 2 :(得分: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()))
第二个版本可能更好。