我想为我的小孩写一个包含一些算术问题的文件。我想要一些着色,这样他就可以很容易地在加号和减号之间做出区别。 这对我很有用。不幸的是,只在一个终端。
import random as rd
from termcolor import colored
N = 10
MAX = 100
f = open("math.txt", "w")
def get_random_str():
a = rd.randint(1, MAX)
b = rd.randint(1, MAX)
if a < MAX*0.4:
string = "%3d "%a + str(colored('+', 'blue')) + " %d = \n"%(b)
else:
if a>b:
string = "%3d "%a + str(colored('-', 'red')) + " %d = \n"%(b)
else:
string = "%3d "%a + str(colored('-', 'red')) + " %d = \n"%(b)
return string
#-------------------------------------------------------------------------
for i in range(1,N):
print i, get_random_str()
当我尝试在文件中写入输出时,我当然只得到颜色代码,例如“[34m + [0m”而不是红色“ - ”和蓝色“+”。
知道如何解决这个问题吗?
答案 0 :(得分:6)
您可以使用任何合适的Pygments和lexer查看TerminalFormatter。
E.g。以下代码:
import sys
from pygments import highlight
from pygments.formatters.terminal import TerminalFormatter
from pygments.lexer import RegexLexer
from pygments.token import Token
class ArithmeticLexer(RegexLexer):
tokens = {
'root': [
(r'[ \n]', Token.Whitespace),
(r'\d+', Token.Number),
(r'\+', Token.Plus),
(r'-', Token.Minus),
(r'\*', Token.Multiply),
(r'/', Token.Division),
]
}
COLOR_SCHEME = {
Token.Whitespace: ('', ''),
Token.Number: ('darkgreen', 'green'),
Token.Plus: ('darkred', 'red'),
Token.Minus: ('darkblue', 'blue'),
Token.Multiply: ('darkyellow', 'yellow'),
Token.Division: ('brown', 'fushia'),
}
if __name__ == '__main__':
with open(sys.argv[1], 'rb') as f:
for line in f:
line = highlight(line, ArithmeticLexer(), TerminalFormatter(colorscheme=COLOR_SCHEME))
print line.strip()
给出:
使用给定内容的文件运行时。用法为<script_name> <input_file_name>
。
colors' reference。 COLOR_SCHEME
中的颜色是(lightscheme, darkscheme)
的元组。默认情况下,TerminalFormatter
使用lightscheme
。
答案 1 :(得分:2)
这需要您使用的程序查看文件以支持ANSI转义序列。例如,在具有less -R
的GNU / Linux中就可以实现这一点。
答案 2 :(得分:0)
您可能希望写入RTF文件而不是纯文本文件。通过这种方式,您可以编写文本并在文字处理器中打开全彩色和高亮显示
或者只是写入HTML文件。
答案 3 :(得分:0)
CSI代表Control Sequence Introducer。这是一个包含more CSI colours的列表。
csi = '\x1B['
red = csi + '31;1m'
yellow = csi + '33;1m'
end = csi + '0m'
print('Here is a %sred%s word and one in %syellow!%s'' % (red, end, yellow, end))