文章

Python Print 控制输出颜色

Python Print 控制输出颜色

基本语法

在python开发的过程中,经常会遇到需要打印各种信息。海量的信息堆砌在控制台中,就会导致信息都混在一起,降低了重要信息的可读性。这时候,如果能给重要的信息加上字体颜色,那么就会更加方便用户阅读了。

在 Python 中控制 print 输出颜色主要使用 ANSI 转义码 (ANSI Escape Codes)

  • 这是跨平台兼容性最好的方法,但在 Windows 系统上可能需要额外处理(例如使用 colorama 库来让 Windows 终端支持 ANSI 码)。
  • ANSI 转义码是以 \033[ 开头的一系列字符,用于设置文本颜色、背景色和样式。
  • 最重要的是,在设置颜色后,你需要使用重置码 \033[0m 来关闭颜色,否则后续的输出都会保持相同的颜色。

或者使用第三方库 (如 coloramatermcolor):

这些库将 ANSI 转义码封装起来,使颜色控制更简单、更具可读性,并提供跨平台兼容性。

ANSI 使用基本格式

1
print('\033[<显示属性>;<前景颜色>;<背景颜色>m + 你的文本 + \033[0m')

其中可自定义的配置项目如下

显示属性配置可选值

显示方式显示效果
0重置/默认 (非常重要,用于关闭所有设置)
1粗体 (Bold) / 高亮 (Bright)
2弱化/低亮度 (Faint)
3斜体 (Italic)
4下划线 (Underline)
5慢速闪烁 (Slow Blink)
7反转/交换前景和背景色 (Reverse)
8隐藏 (Concealed)
9删除线 (Strike-through)

前景(文本颜色)颜色配置可选值

代码颜色示例
 标准颜色 (30-37) 
30黑色 (Black)\033[30m 文本 \033[0m
31红色 (Red)\033[31m 文本 \033[0m
32绿色 (Green)\033[32m 文本 \033[0m
33黄色 (Yellow)\033[33m 文本 \033[0m
34蓝色 (Blue)\033[34m 文本 \033[0m
35品红色 (Magenta)\033[35m 文本 \033[0m
36青色 (Cyan)\033[36m 文本 \033[0m
37白色/浅灰色 (White)\033[37m 文本 \033[0m
39默认前景颜色\033[39m 文本 \033[0m
 高强度/亮色 (90-97) 
90亮黑色/灰色 (Bright Black)\033[90m 文本 \033[0m
91亮红色 (Bright Red)\033[91m 文本 \033[0m
92亮绿色 (Bright Green)\033[92m 文本 \033[0m
93亮黄色 (Bright Yellow)\033[93m 文本 \033[0m
94亮蓝色 (Bright Blue)\033[94m 文本 \033[0m
95亮品红色 (Bright Magenta)\033[95m 文本 \033[0m
96亮青色 (Bright Cyan)\033[96m 文本 \033[0m
97亮白色 (Bright White)\033[97m 文本 \033[0m

通过设置显示属性代码 1 也可以达到类似的高亮效果,但使用这些颜色代码更明确。

背景颜色配置可选值

代码颜色示例
 标准背景颜色 (40-47) 
40黑色背景 (Black Background)\033[40m 文本 \033[0m
41红色背景 (Red Background)\033[41m 文本 \033[0m
42绿色背景 (Green Background)\033[42m 文本 \033[0m
43黄色背景 (Yellow Background)\033[43m 文本 \033[0m
44蓝色背景 (Blue Background)\033[44m 文本 \033[0m
45品红色背景 (Magenta Background)\033[45m 文本 \033[0m
46青色背景 (Cyan Background)\033[46m 文本 \033[0m
47白色/浅灰背景 (White Background)\033[47m 文本 \033[0m
49默认背景颜色\033[49m 文本 \033[0m
 高强度/亮色背景 (100-107) 
100亮黑色/灰背景\033[100m 文本 \033[0m
101亮红色背景\033[101m 文本 \033[0m
102亮绿色背景\033[102m 文本 \033[0m
103亮黄色背景\033[103m 文本 \033[0m
104亮蓝色背景\033[104m 文本 \033[0m
105亮品红色背景\033[105m 文本 \033[0m
106亮青色背景\033[106m 文本 \033[0m
107亮白色背景\033[107m 文本 \033[0m

注意: 在 Windows 终端上,如果直接使用 ANSI 码无法显示颜色,你需要导入 colorama 并调用 colorama.init(autoreset=True) 来启用颜色支持。

ANSI 转义码使用案例

实例1:单前景色单点单句标记

1
2
3
4
5
print("\033[31m这是红色字体\033[0m")
print("\033[32m这是绿色字体\033[0m")
print("\033[33m这是黄色字体\033[0m")
print("\033[34m这是蓝色字体\033[0m")
print("\033[38m这是默认字体\033[0m")  # 大于37将显示默认字体

实例2:显示方式前景色背景色单点单句标记

1
2
3
4
print("\033[0;31;42m这是默认红色字体背景绿色\033[0m")
print("\033[1;32;43m这是高亮绿色字体背景黄色\033[0m")
print("\033[4;33;45m这是下划线黄色字体背景紫红色\033[0m")
print("\033[5;34;46m这是闪烁蓝色字体背景青蓝色\033[0m")

实例3:综合示例

1
2
3
4
5
6
# 打印红色文本
print('\033[31m这是红色文本\033[0m')
# 打印粗体的绿色文本
print('\033[1;32m这是粗体的绿色文本\033[0m')
# 打印蓝色背景的黄色文本
print('\033[33;44m这是蓝色背景的黄色文本\033[0m')

实例4:多行操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 定义常用的 ANSI 码常量
RESET = '\033[0m'
BOLD = '\033[1m'
YELLOW_TEXT = '\033[93m'
RED_BG = '\033[41m'

# 定义消息内容
line1 = "**********************************"
line2 = "** 重要警告信息          **"
line3 = "** 请立即检查系统日志文件!    **"
line4 = "**********************************"

# 构造彩色输出字符串
colored_output = (
    # 1. 应用所有样式(粗体 + 亮黄色文本 + 红色背景)
    BOLD + YELLOW_TEXT + RED_BG +

    # 2. 打印第一行
    line1 + '\n' +

    # 3. 打印第二行
    line2 + '\n' +

    # 4. 打印第三行
    line3 + '\n' +

    # 5. 打印第四行
    line4 +

    # 6. 重置所有样式
    RESET
)

# 打印最终结果
print(colored_output)

在这个例子中:

  • 我们通过 BOLD + YELLOW_TEXT + RED_BG 一次性设置了所有样式。
  • 我们在每行末尾使用标准的换行符 \n
  • 最重要的是,我们在整个字符串的末尾加上了 RESET (\033[0m),这样可以确保在消息块打印结束后,后续的任何 print 语句都将恢复到终端的默认颜色和样式。

使用 Colorama 库

colorama 是一个流行的库,它使 ANSI 码在 Windows 上的工作变得容易,并且提供了更容易使用的常量

安装方法:

1
pip install colorama
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from colorama import Fore, Back, Style, init

# 自动初始化并设置自动重置(Autoreset),
# 这样每次 print 结束后颜色都会自动重置为默认值。
init(autoreset=True)

# 打印红色文本
print(Fore.RED + '这是红色文本')

# 打印绿色文本,带有亮度的样式
print(Style.BRIGHT + Fore.GREEN + '这是亮绿色文本')

# 打印黄色背景的蓝色文本
print(Fore.BLUE + Back.YELLOW + '这是黄色背景的蓝色文本')

# 可以结合使用,但由于设置了 autoreset=True,所以不需要 Style.RESET_ALL
# 如果不设置 autoreset,则需要手动添加 Style.RESET_ALL
print(Fore.CYAN + '青色文本' + Style.RESET_ALL)

使用 Termcolor 库

termcolor 是另一个简洁的库,它提供了一个简单的函数 colored() 来封装颜色设置。

安装方法:

1
pip install termcolor

示例代码:

1
2
3
4
5
6
7
8
9
10
from termcolor import colored

# 打印红色文本
print(colored('这是红色文本', 'red'))

# 打印粗体的绿色文本
print(colored('这是粗体的绿色文本', 'green', attrs=['bold']))

# 打印蓝色背景的黄色文本
print(colored('这是蓝色背景的黄色文本', 'yellow', 'on_blue'))

参考

本文由作者按照 CC BY 4.0 进行授权