我有一个简单的python脚本,我逐行读取文件:
while True:
line = f.readline()
if line:
print line,
else:
time.sleep(0.1)
除其他事项外,这些行还包含[IP addresses]
和<email addresses>
中的[]
和<>
。
我想正常打印整行,但是括号内的文字(即IP和电子邮件)有不同的颜色,例如'\033[38;5;180m'
最好的方法是什么?
我正在使用python 2.7
答案 0 :(得分:2)
我会为sys.stdout
安装自定义处理程序,因此您无需担心更改现有代码 - print
会为您处理着色。实际的文本替换可以通过几次正则表达式来完成。*
import sys
import re
def colorize(text):
# Underline <email addresses>:
text = re.sub('<.*>',lambda m: '\x1b[4m{}\x1b[0m'.format(m.group()), text)
# Make [IP addresses] peach:
return re.sub('\[[0-9.]*\]',lambda m: '\x1b[38;5;180m{}\x1b[0m'.format(m.group()), text)
class MyStdout(object):
def __init__(self, term=sys.stdout):
self.term = term
def write(self, text):
text = colorize(text)
self.term.write(text)
sys.stdout = MyStdout()
print 'this is an email: <someone@whatever.com>'
print 'this is an ip: [1.1.1.1]'
这会突出显示电子邮件地址,并使您提供的颜色为IP。
*关于正则表达式的注释。小心匹配括号/ IP的那个 - 我在原始实现中有一个难以跟踪的错误,因为它匹配终端转义序列。呸!