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')
[2;31;43m 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}")
[1m this this [0m
>>> print(f"{bcolors.FAIL} this this {bcolors.ENDC}")
[91m this this [0m
9.1.3. 彩色输出方式二¶
使用colorama或者termcolor,譬如使用termcolor:
安装:
sudo apt install python3-termcolor
>>> from termcolor import colored
>>> print(colored("this is the dog king.", "red"))
[31mthis is the dog king.[0m
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"))
[2;31;43m
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'))
[2;31;43m
CHEESY
这是中文
>>> print(cnt_all.encode().decode("unicode_escape").encode('latin').decode('utf-8'))
[2;31;43m
CHEESY
这是中文