在控制台输出彩色信息,不是编程语言特有的属性,而是利用了ANSI转义序列。 无论使用的是哪种编程语言,只要正确的使用ANSI转义序列就可以打印出彩色信息。 常用的ANSI序列程序有ANSICON等。
原理
chatgpt赋能Python:Python颜色打印让终端输出更加鲜活。 作为Python编程语言的一大特点,输出十分便捷。通过print函数, 可以输出文字、数字、变量等等。而如果只是单纯的黑白输出, 显得有些过于沉闷。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!')
Hello, world!
在这个例子中,控制码’\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('\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
sudo apt install python3-termcolor
from termcolor import colored
print(colored("this is the dog king.", "red"))
cnts = open('/data/demo/color_file.txt').readlines()
print(cnts)
['\\033[2;31;43m\n', 'CHEESY\n', '这是中文']
在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('/data/demo/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;43m\nCHEESY\n\xc3\xa8\xc2\xbf\xc2\x99\xc3\xa6\xc2\x98\xc2\xaf\xc3\xa4\xc2\xb8\xc2\xad\xc3\xa6\xc2\x96\xc2\x87'
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
这是中文