【问题标题】:How to color text more efficiently?如何更有效地为文本着色?
【发布时间】:2021-07-13 05:37:23
【问题描述】:

所以我知道如何为文本着色,我正在使用一个类来定义颜色,然后在打印语句中使用它 -

class color:
 purple = '\033[95m'
 cyan = '\033[96m'
 darkcyan = '\033[36m'
 blue = '\033[94m'
 green = '\033[92m'
 yellow = '\033[93m'
 end = '\033[0m'

print(color.green + This makes the text green! + color.end)

但是我正在为 CSE 课程做一个项目,需要阅读大量文本,最终所有的白色都混合在一起,所以使用彩色文本会使事情变得更容易,所以我想知道是否有更简单、更短的时间消费,做事方式?

【问题讨论】:

  • 这取决于你实际用它做什么。进行自定义控制台输出的最佳方法是使用ncurses,但这对于您的目的来说可能是多余的。
  • 您可以定义一堆方法,将前缀和后缀添加到任何传递的文本并打印出来? print_purple(text) 例如或有一个采用颜色的基本方法:print_color(color.purple, text)

标签: python console escaping ansi-colors


【解决方案1】:

您可以实现自己的函数来接受文本和颜色,插入必要的代码并打印。如果你想使用一个类,就像你正在做的那样,我建议子类化Enum,并将颜色本身命名为全部大写,这是 Python 的常量约定。 (另外,如果你以前没有见过 f-strings,我推荐giving them a look。)

from enum import Enum

class Color(Enum):
    PUPLE = 95
    CYAN = 96
    DARK_CYAN = 36
    BLUE = 94
    GREEN = 92
    YELLOW = 93
    # (Add any further colors you want to use...)

def color_print(text, color):
    """Print text in the specified color."""
    if color not in Color:
        raise KeyError(f'Invalid text color: {color}')
    
    print(f'\033[{color.value}m{text}\033[0m')

你可以这样使用:

color_print('This text should be blue.', Color.BLUE)

你也可以用字典来完成同样的事情。我不确定一种方法是否比另一种更好或更清洁,因此您可以选择更适合您并且使用起来更方便的方法。

COLORS = {
    'purple': 95,
    'cyan': 96,
    'dark_cyan': 36,
    'blue': 94,
    'green': 92,
    'yellow': 93,
    # (Add any further colors you want to use...)
}

def color_print(text, color):
    """Print text in the specified color."""
    try:
        code = COLORS[color]
    except KeyError:
        raise KeyError(f'Invalid text color: {color}')
    
    print(f'\033[{code}m{text}\033[0m')

对于这种方法,您可以将颜色指定为字符串而不是枚举的成员:

color_print('This text should be blue.', 'blue')

还有一个名为 ansi-colors 的包,看起来它有很多有用的选项(例如设置前景色和背景色,以及在不计算转义码的情况下检查颜色编码字符串的“实际”长度) )。自 2017 年以来一直没有更新,但可能值得一试。

【讨论】:

    猜你喜欢
    • 2010-10-02
    • 2015-09-06
    • 1970-01-01
    • 2017-07-07
    • 2021-11-19
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 2018-09-14
    相关资源
    最近更新 更多