Python - 写彩色文字在文件中

2024-06-14 07:35:08 发布

您现在位置: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+[0米”,而不是红色“-”和蓝色“+”。

你知道怎么解决这个问题吗?


Tags: 文件importgetstringif孩子randomred
3条回答

这需要用于查看文件的程序来支持ANSI转义序列。这是可能的,例如,在GNU/Linux中使用less -R

您可能希望写入RTF文件而不是纯文本文件。这样你就可以用全彩色和高光的文字处理器来写文本和打开

或者只写一个HTML文件。

您可以使用任何合适的lexerTerminalFormatter签出Pygments

例如,以下代码:

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

相关问题 更多 >