Python 彩色终端
理解 ANSI 转义序列的原理
掌握
colorama库实现跨平台彩色输出能实现彩色文字、背景色、进度条等终端效果
核心讲解
(1)ANSI 转义序列
终端的彩色效果是通过 ANSI 转义码实现的,用特殊的字符序列控制颜色、样式。
格式:
\033[显示方式;前景色;背景色m重置:
\033[0m,结束后一定要重置,否则后面都会变色前景色:30-37 黑、红、绿、黄、蓝、紫、青、白
背景色:40-47 对应上面的颜色
显示方式:0 默认、1 加粗、4 下划线、7 反显
(2)colorama 库(推荐)
原生 ANSI 在 Windows cmd 里不支持,colorama 库做了跨平台兼容,Windows、macOS、Linux 都能用,是最主流的方案。
(3)常用颜色
Fore:前景色,RED、GREEN、YELLOW、BLUE、MAGENTA、CYAN、WHITE
Back:背景色
Style:样式,BRIGHT(高亮)、DIM(暗淡)、RESET_ALL(重置)
代码示例
# ===== 1. 原生ANSI转义码 =====
print("===== 原生ANSI =====")
print("\033[31m红色文字\033[0m")
print("\033[32m绿色文字\033[0m")
print("\033[1;33m加粗黄色文字\033[0m")
print("\033[41m红色背景\033[0m")
print("\033[32;43m绿字黄底\033[0m")
# ===== 2. colorama 跨平台方案 =====
from colorama import init, Fore, Back, Style
# 初始化,自动适配系统
init(autoreset=True) # autoreset=True 每次print后自动重置
print("\n===== colorama 彩色输出 =====")
print(Fore.RED + "红色文字")
print(Fore.GREEN + "绿色文字")
print(Fore.YELLOW + "黄色警告")
print(Fore.BLUE + "蓝色信息")
print(Back.RED + Fore.WHITE + "红底白字")
print(Back.GREEN + Fore.BLACK + "绿底黑字")
print(Style.BRIGHT + Fore.CYAN + "高亮青色")
print(Style.DIM + Fore.CYAN + "暗淡青色")
# 混合使用
print(Fore.RED + Back.YELLOW + Style.BRIGHT + "红体黄底加粗")
# ===== 3. 实用示例:日志级别彩色输出 =====
def log_info(msg):
print(f"{Fore.BLUE}[INFO]{Style.RESET_ALL} {msg}")
def log_warn(msg):
print(f"{Fore.YELLOW}[WARN]{Style.RESET_ALL} {msg}")
def log_error(msg):
print(f"{Fore.RED}[ERROR]{Style.RESET_ALL} {msg}")
def log_success(msg):
print(f"{Fore.GREEN}[SUCCESS]{Style.RESET_ALL} {msg}")
print("\n===== 彩色日志 =====")
log_info("程序启动")
log_warn("配置文件不存在,使用默认值")
log_error("连接数据库失败")
log_success("任务执行完成")
# ===== 4. 简易进度条 =====
import time
def progress_bar(total):
for i in range(total + 1):
percent = i / total * 100
bar_len = 30
filled = int(bar_len * i / total)
bar = "█" * filled + "░" * (bar_len - filled)
# \r 回车不换行,覆盖当前行
print(f"\r{Fore.CYAN}进度:|{bar}| {percent:.1f}%", end="")
time.sleep(0.1)
print("\n" + Fore.GREEN + "完成!")
print("\n===== 进度条演示 =====")
progress_bar(50)
常见误区
忘记重置颜色:不用 autoreset 的话,变色后所有输出都会变色,一定要加重置码
Windows 不生效:原生 ANSI 在旧版 cmd 不支持,用 colorama 就没问题
进度条换行:进度条要用
\r回车,不能用\n换行,end="" 不换行颜色太多太乱:合理使用颜色,一般 3-4 种足够,太多反而影响阅读
IDE 终端不支持:有些 IDE 终端颜色显示不全,以系统终端为准
课后练习
用 colorama 实现不同级别的彩色日志输出
实现一个带百分比的彩色进度条
尝试输出一个彩色的表格,表头用不同颜色
思考:终端彩色输出有什么实际应用场景?

