HOWTO · Python
Python 打印彩色文本
本文演示了如何在 Python 中打印彩色文本。
本页内容
本指南介绍如何使用 Python 在终端中打印彩色文本。print() 会将文本写入输出流;嵌入文本中的 ANSI 转义序列会向支持它们的终端请求格式更改。终端可能会将这些序列显示为颜色,而日志文件、IDE 窗格或其他输出目标可能会直接显示代码。有关背景色和其他终端控制功能,请参阅 ANSI 转义码以及 Python 中的颜色指南。
终端颜色代码的工作原理
ANSI 颜色序列以转义字符(\033)开头,并包含用于选择前景色、背景色或样式的数字参数。例如,\033[31m 表示请求红色前景文本,\033[0m 表示请求重置。终端负责解释这些控制字符;Python 本身不会给字符串着色。能否显示颜色取决于终端以及输出的去向,因此并非每个控制台或重定向后的文件都会显示彩色文本。
重置很重要,因为打印消息后,终端格式可能仍然处于启用状态。在每段彩色文本的末尾重置格式,可以避免同一终端会话中的后续文本继承该格式。
使用 ANSI 转义码打印彩色文本
定义命名常量,让这些序列易于重复使用和修改。下面这个完整示例会打印三条消息,并在每条消息后重置格式。这里只提供代码,不表示此处执行过代码或获得了执行结果。
运行此示例。示例代码中的文字标签仍为英文:
class Colors:
GREEN = "\033[92m"
YELLOW = "\033[93m"
RED = "\033[91m"
RESET = "\033[0m"
print(Colors.GREEN + "File Saved Successfully!" + Colors.RESET)
print(Colors.YELLOW + "Warning: Are you sure you want to continue?" + Colors.RESET)
print(Colors.RED + "Unable to delete record." + Colors.RESET)
要调整示例,可以将颜色常量替换为其他受支持的 ANSI 序列。也可以将序列直接放入字符串,或使用 f-string;这些只是不同的格式化方式,不会改变哪些终端能够解释该序列。代码可直接选择、复制和编辑。
使用 Colorama 兼容 Windows
ANSI 的显示效果取决于终端环境。在 Windows 上,colorama 可以帮助输出 ANSI 序列的应用程序在受支持的控制台中正常工作,但实际行为仍取决于控制台和输出目标。请在运行脚本的环境中安装该软件包,使用 python -m pip install colorama(或 python3 -m pip install colorama);这些是 shell 命令,不是 Python 语句。
下面的完整示例会处理可选软件包尚未安装的情况。如果软件包可用,示例会初始化 Colorama,并组合使用前景色和亮色样式。此处未执行该示例;依赖软件包的分支需要先安装 Colorama。示例代码中的文字标签仍为英文。
try:
import colorama
from colorama import Fore, Style
except ImportError:
print("Install colorama with: python -m pip install colorama")
else:
colorama.init()
print(Fore.BLUE + Style.BRIGHT + "This is the color of the sky" + Style.RESET_ALL)
print(Fore.GREEN + "This is the color of grass" + Style.RESET_ALL)
print(Fore.BLUE + Style.DIM + "This is a dimmer version of the sky" + Style.RESET_ALL)
print(Fore.YELLOW + "This is the color of the sun" + Style.RESET_ALL)
Colorama 通过 Fore 提供前景色常量,通过 Style 提供文本样式。Style.RESET_ALL 会重置当前启用的 ANSI 样式;Fore.RESET 则只重置前景色。实际显示效果因终端而异。
重置颜色和其他终端样式
对于原始 ANSI 序列,请在彩色文本后追加重置序列,例如 \033[0m。示例使用命名常量 RESET 表示该序列,让每条消息的格式都能独立收尾。如果省略重置,后续输出可能继续沿用所选颜色或样式,直到另一条序列将其更改,或终端自行重置。
使用 Colorama 时,如果需要将整个格式状态恢复为默认值,请使用 Style.RESET_ALL。Fore.RESET 只重置前景色,不会重置所有其他活动样式。请选择与已更改属性相匹配的重置方式,并将其紧接在需要设置格式的文本之后。这样可以避免后续消息和提示意外继承终端样式。