Python:在文件中写入彩色文本

时间:2013-07-21 12:19:02

标签: python

我想为我的小孩写一个包含一些算术问题的文件。我想要一些着色,这样他就可以很容易地在加号和减号之间做出区别。 这对我很有用。不幸的是,只在一个终端。

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”而不是红色“ - ”和蓝色“+”。

知道如何解决这个问题吗?

4 个答案:

答案 0 :(得分:6)

您可以使用任何合适的Pygmentslexer查看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()

给出:

enter image description here

使用给定内容的文件运行时。用法为<script_name> <input_file_name>

colors' referenceCOLOR_SCHEME中的颜色是(lightscheme, darkscheme)的元组。默认情况下,TerminalFormatter使用lightscheme

答案 1 :(得分:2)

这需要您使用的程序查看文件以支持ANSI转义序列。例如,在具有less -R的GNU / Linux中就可以实现这一点。

答案 2 :(得分:0)

您可能希望写入RTF文件而不是纯文本文件。通过这种方式,您可以编写文本并在文字处理器中打开全彩色和高亮显示

或者只是写入HTML文件。

答案 3 :(得分:0)

使用CSI颜色转义序列

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))