9.1. 终端颜色

在控制台输出彩色信息,不是编程语言特有的属性,而是利用了ANSI转义序列。无论使用的是哪种编程语言,只要正确的使用ANSI转义序列就可以打印出彩色信息。常用的ANSI序列程序有ANSICON等。

9.1.1. 原理

chatgpt赋能python:Python颜色打印:让你的终端输出更加鲜活

作为Python编程语言的一大特点,输出十分便捷。通过print函数,我们可以输出文字、数字、变量等等。而如果只是单纯的黑白输出,显得有些过于沉闷。Python颜色打印的功能便可以很好地解决这个问题。

什么是Python颜色打印? Python颜色打印是指在终端输出界面中,使用不同的颜色为输出文字进行标记。通过不同颜色的搭配,我们可以更加直观和清晰地展示输出信息,更加便于观察。

在Python中,我们可以使用ANSI控制码来设置输出文字的颜色。这些控制码包括:

“\033[”:表示 ANSI 控制码的开始,必须放在代码的开头,后面是控制码的参数

“m”:表示控制码的结束,必须放在参数的结尾

参数:选择 ANSI 控制码要传递到控制台的参数,常用参数如下:

0:重置所有属性
1:设置粗体
2:设置一半亮度
3:设置斜体
4:设置下划线
5:设置闪烁
6:设置闪烁(快速)
7:设置反向图像
8:消隐
30:设置前景色为黑色
31:设置前景色为红色
32:设置前景色为绿色
33:设置前景色为黄色
34:设置前景色为蓝色
35:设置前景色为洋红
36:设置前景色为青色
37:设置前景色为白色
40:设置背景色为黑色
41:设置背景色为红色
42:设置背景色为绿色
43:设置背景色为黄色
44:设置背景色为蓝色
45:设置背景色为洋红
46:设置背景色为青色
47:设置背景色为白色

如何在Python中使用颜色打印? 在Python中使用颜色打印,只需要在print函数中加入ANSI控制码即可。比如:

print(‘\033[31m’ + ‘Hello, world!’)

1 2 在这个例子中,控制码’033[31m’代表设置输出文字的前景色为红色,加上后面的文字,即可在终端输出中看到红色的”Hello, world!“。

但如果每一次输出中都加入这样的控制码,未免也会显得代码复杂和混乱。这里我们推荐使用python配置文件的形式,将常用的颜色控制码写成字典形式,如下例所示:

color_dict = {
    'reset': '\033[0m',
    'bold': '\033[01m',
    'disable': '\033[02m',
    'underline': '\033[04m',
    'reverse': '\033[07m',
    'strikethrough': '\033[09m',
    'invisible': '\033[08m',
    'black': '\033[30m',
    'red': '\033[31m',
    'green': '\033[32m',
    'orange': '\033[33m',
    'blue': '\033[34m',
    'purple': '\033[35m',
    'cyan': '\033[36m',
    'light_grey': '\033[37m',
    'dark_grey': '\033[90m',
    'light_red': '\033[91m',
    'light_green': '\033[92m',
    'yellow': '\033[93m',
    'light_blue': '\033[94m',
    'pink': '\033[95m',
    'light_cyan': '\033[96m'
}

这时,当我们使用颜色打印时,只需要通过这个字典来获取相应的控制码即可。比如:

print(color_dict[‘red’]+“输出红色文字”+color_dict[‘reset’])

这样,我们就可以方便又清晰地实现Python颜色打印了。

Python颜色打印是一项非常实用的技术,可以让输出信息更加生动、明亮、直观。通过掌握ANSI控制码和配置文件的使用方法,我们可以轻松实现Python颜色打印,并在终端输出上展示出更佳的编程效果。

9.1.2. 彩色输出方式一

如:

>>> print('\033[2;31;43m CHEESY')
 CHEESY

直接使用ANSI转义序列

>>> class bcolors:
>>>     HEADER = '\033[95m'
>>>     OKBLUE = '\033[94m'
>>>     OKCYAN = '\033[96m'
>>>     OKGREEN = '\033[92m'
>>>     WARNING = '\033[93m'
>>>     FAIL = '\033[91m'
>>>     ENDC = '\033[0m'
>>>     BOLD = '\033[1m'
>>>     UNDERLINE = '\033[4m'
>>> print(f"{bcolors.BOLD} this this {bcolors.ENDC}")
 this this 
>>> print(f"{bcolors.FAIL} this this {bcolors.ENDC}")
 this this 

9.1.3. 彩色输出方式二

使用colorama或者termcolor,譬如使用termcolor:

安装:

sudo apt install python3-termcolor
>>> from termcolor import colored
>>> print(colored("this is the dog king.", "red"))
this is the dog king.

9.1.4. 输出文件中的颜色编码

这里需要对文本内容进行解码。

>>> cnts = open('color_file.txt').readlines()
>>> print(cnts)
['\033[2;31;43mn', 'CHEESYn', '这是中文']

在Python 3中解码(unicode_escape)一个字符串。

>>> for x in  cnts:
>>>     # print(x.encode('utf-8').decode("unicode-escape") )
>>>     print(bytes(x, "utf-8").decode("unicode_escape"))


CHEESY

这是中文
>>> cnt_all = open('color_file.txt').read()
>>> # print(cnt_all.encode().decode("unicode-escape"))
>>>
>>> # print(bytes(cnt_all, "utf-8").decode("unicode_escape"))
>>>
>>> print(bytes(cnt_all, "utf-8").decode("unicode_escape").encode())
b'x1b[2;31;43mnCHEESYnxc3xa8xc2xbfxc2x99xc3xa6xc2x98xc2xafxc3xa4xc2xb8xc2xadxc3xa6xc2x96xc2x87'
>>> print(cnt_all.encode().decode("unicode_escape").encode('latin').decode('utf-8'))

CHEESY
这是中文
>>> print(cnt_all.encode().decode("unicode_escape").encode('latin').decode('utf-8'))

CHEESY
这是中文