【控制台输出美化 —— ANSI 转义码 / colorama / rich 库全面演示】# 本示例演示三种终端美化方案原始 ANSI 码、colorama 封装、rich 高级渲染import sysimport osimport time# # 第一部分ANSI 转义码 —— 最底层、跨平台兼容Windows 需开启 VT 模式# def demo_ansi_codes():使用 ANSI 转义序列控制终端颜色和样式print(\n * 60)print(【第一部分】ANSI 转义码示例)print( * 60)# ANSI 转义序列格式: \033[样式;前景色;背景色m# 样式: 0重置, 1粗体, 3斜体, 4下划线, 7反色, 9删除线# 前景色: 30-37 标准色, 90-97 亮色# 背景色: 40-47 标准色, 100-107 亮色# 重置RESET \033[0m# 基本文字颜色print(基本颜色:)colors [(黑色, 30), (红色, 31), (绿色, 32), (黄色, 33),(蓝色, 34), (紫色, 35), (青色, 36), (白色, 37),]for name, code in colors:print(f \033[{code}m{name}\033[0m , end)print()# 亮色版本print(亮色:)bright_colors [(亮黑, 90), (亮红, 91), (亮绿, 92), (亮黄, 93),(亮蓝, 94), (亮紫, 95), (亮青, 96), (亮白, 97),]for name, code in bright_colors:print(f \033[{code}m{name}\033[0m , end)print()# 样式组合print(样式组合:)print(f \033[1;31m粗体红色\033[0m)print(f \033[4;32m下划线绿色\033[0m)print(f \033[7;33m反色黄色\033[0m)print(f \033[1;4;34m粗体下划线蓝色\033[0m)# 256 色模式: \033[38;5;Nm 前景, \033[48;5;Nm 背景print(256 色渐变:)gradient for i in range(16, 232):gradient f\033[48;5;{i}m \033[0mprint(f {gradient})# 检测终端大小try:columns, rows os.get_terminal_size()print(f\n终端尺寸: {columns} 列 x {rows} 行)except OSError:print(\n无法检测终端大小)# # 第二部分colorama —— 跨平台 ANSI 颜色封装Windows 兼容# def demo_colorama():使用 colorama 库简化颜色输出print(\n * 60)print(【第二部分】colorama 示例需 pip install colorama)print( * 60)try:from colorama import Fore, Back, Style, init# init() 在 Windows 上启用 ANSI 支持init(autoresetTrue)print(f{Fore.RED}红色文字{Style.RESET_ALL})print(f{Fore.GREEN}绿色文字{Style.RESET_ALL})print(f{Fore.YELLOW}{Back.BLUE}黄色文字蓝底{Style.RESET_ALL})print(f{Style.BRIGHT}{Fore.CYAN}亮青色{Style.RESET_ALL})print(f{Fore.RED}{Back.WHITE}{Style.BRIGHT}亮红白底{Style.RESET_ALL})# 实用彩色进度指示print(\ncolorama 实现进度指示:)for i in range(11):percent i * 10bar f[{# * i}{. * (10 - i)}]color Fore.GREEN if percent 70 else \Fore.YELLOW if percent 90 else Fore.REDprint(f\r{color}{bar} {percent}%{Style.RESET_ALL}, end)time.sleep(0.15)print(\n完成!)except ImportError:print( colorama 未安装跳过演示)print( pip install colorama)# # 第三部分rich —— 高级终端输出库# def demo_rich():使用 rich 库实现高级终端美化print(\n * 60)print(【第三部分】rich 示例需 pip install rich)print( * 60)try:from rich.console import Consolefrom rich.table import Tablefrom rich.progress import Progress, BarColumn, TextColumnfrom rich.panel import Panelfrom rich.layout import Layoutfrom rich.text import Textfrom rich import boxconsole Console()# ---- 基本样式输出 ----console.print([bold red]粗体红色[/bold red])console.print([underline green]下划线绿色[/underline green])console.print([bold yellow on blue]黄字蓝底[/bold yellow on blue])# ---- Panel 面板 ----console.print(Panel(这是 Panel 面板内容,title面板标题,border_stylecyan))# ---- Table 表格 ----table Table(titlerich 表格, boxbox.ROUNDED)table.add_column(编号, stylecyan, justifyright)table.add_column(名称, stylegreen)table.add_column(状态, styleyellow)table.add_row(1, 任务 A, [green]完成[/green])table.add_row(2, 任务 B, [yellow]进行中[/yellow])table.add_row(3, 任务 C, [red]失败[/red])console.print(table)# ---- Progress 进度条 ----print(\nrich 进度条演示:)with Progress(TextColumn([progress.description]{task.description}),BarColumn(),TextColumn([progress.percentage]{task.percentage:3.0f}%),consoleconsole,) as progress:task progress.add_task([cyan]处理中..., total100)for _ in range(20):time.sleep(0.08)progress.update(task, advance5)# ---- 终端尺寸检测 ----w, h console.sizeconsole.print(f\n终端尺寸: {w} x {h}, styledim)except ImportError:console printprint( rich 未安装跳过演示)print( pip install rich)# # 第四部分综合实用函数——自制进度条与颜色工具# def colored(text, fgNone, bgNone, boldFalse):自制简易彩色文本函数仅 ANSI无需第三方库RESET \033[0mcodes []if bold:codes.append(1)if fg:codes.append(str(30 [k, r, g, y, b, m, c, w].index(fg[0].lower())))if bg:codes.append(str(40 [k, r, g, y, b, m, c, w].index(bg[0].lower())))if codes:return f\033[{;.join(codes)}m{text}{RESET}return textdef progress_bar(percent, width40):自制文本进度条filled int(width * percent / 100)bar █ * filled ░ * (width - filled)color 32 if percent 70 else 33 if percent 90 else 31return f\033[{color}m{bar}\033[0m {percent:.0f}%# ---------- 综合演示 ----------if __name__ __main__:print(控制台输出美化综合演示)print(当前终端编码:, sys.stdout.encoding)demo_ansi_codes()demo_colorama()demo_rich()# 自制进度条演示print(\n * 60)print(【自制 ANSI 进度条】)print( * 60)for p in range(0, 101, 5):bar progress_bar(p)print(f\r 进度: {bar}, end)time.sleep(0.05)print(\n 完成!)# 自制彩色文字演示print(\n自制 colored() 函数:)print(f {colored(红色, fgred)})print(f {colored(绿色加粗, fggreen, boldTrue)})print(f {colored(黄字蓝底, fgyellow, bgblue)})
Python控制台输出美化
发布时间:2026/5/30 11:20:22
【控制台输出美化 —— ANSI 转义码 / colorama / rich 库全面演示】# 本示例演示三种终端美化方案原始 ANSI 码、colorama 封装、rich 高级渲染import sysimport osimport time# # 第一部分ANSI 转义码 —— 最底层、跨平台兼容Windows 需开启 VT 模式# def demo_ansi_codes():使用 ANSI 转义序列控制终端颜色和样式print(\n * 60)print(【第一部分】ANSI 转义码示例)print( * 60)# ANSI 转义序列格式: \033[样式;前景色;背景色m# 样式: 0重置, 1粗体, 3斜体, 4下划线, 7反色, 9删除线# 前景色: 30-37 标准色, 90-97 亮色# 背景色: 40-47 标准色, 100-107 亮色# 重置RESET \033[0m# 基本文字颜色print(基本颜色:)colors [(黑色, 30), (红色, 31), (绿色, 32), (黄色, 33),(蓝色, 34), (紫色, 35), (青色, 36), (白色, 37),]for name, code in colors:print(f \033[{code}m{name}\033[0m , end)print()# 亮色版本print(亮色:)bright_colors [(亮黑, 90), (亮红, 91), (亮绿, 92), (亮黄, 93),(亮蓝, 94), (亮紫, 95), (亮青, 96), (亮白, 97),]for name, code in bright_colors:print(f \033[{code}m{name}\033[0m , end)print()# 样式组合print(样式组合:)print(f \033[1;31m粗体红色\033[0m)print(f \033[4;32m下划线绿色\033[0m)print(f \033[7;33m反色黄色\033[0m)print(f \033[1;4;34m粗体下划线蓝色\033[0m)# 256 色模式: \033[38;5;Nm 前景, \033[48;5;Nm 背景print(256 色渐变:)gradient for i in range(16, 232):gradient f\033[48;5;{i}m \033[0mprint(f {gradient})# 检测终端大小try:columns, rows os.get_terminal_size()print(f\n终端尺寸: {columns} 列 x {rows} 行)except OSError:print(\n无法检测终端大小)# # 第二部分colorama —— 跨平台 ANSI 颜色封装Windows 兼容# def demo_colorama():使用 colorama 库简化颜色输出print(\n * 60)print(【第二部分】colorama 示例需 pip install colorama)print( * 60)try:from colorama import Fore, Back, Style, init# init() 在 Windows 上启用 ANSI 支持init(autoresetTrue)print(f{Fore.RED}红色文字{Style.RESET_ALL})print(f{Fore.GREEN}绿色文字{Style.RESET_ALL})print(f{Fore.YELLOW}{Back.BLUE}黄色文字蓝底{Style.RESET_ALL})print(f{Style.BRIGHT}{Fore.CYAN}亮青色{Style.RESET_ALL})print(f{Fore.RED}{Back.WHITE}{Style.BRIGHT}亮红白底{Style.RESET_ALL})# 实用彩色进度指示print(\ncolorama 实现进度指示:)for i in range(11):percent i * 10bar f[{# * i}{. * (10 - i)}]color Fore.GREEN if percent 70 else \Fore.YELLOW if percent 90 else Fore.REDprint(f\r{color}{bar} {percent}%{Style.RESET_ALL}, end)time.sleep(0.15)print(\n完成!)except ImportError:print( colorama 未安装跳过演示)print( pip install colorama)# # 第三部分rich —— 高级终端输出库# def demo_rich():使用 rich 库实现高级终端美化print(\n * 60)print(【第三部分】rich 示例需 pip install rich)print( * 60)try:from rich.console import Consolefrom rich.table import Tablefrom rich.progress import Progress, BarColumn, TextColumnfrom rich.panel import Panelfrom rich.layout import Layoutfrom rich.text import Textfrom rich import boxconsole Console()# ---- 基本样式输出 ----console.print([bold red]粗体红色[/bold red])console.print([underline green]下划线绿色[/underline green])console.print([bold yellow on blue]黄字蓝底[/bold yellow on blue])# ---- Panel 面板 ----console.print(Panel(这是 Panel 面板内容,title面板标题,border_stylecyan))# ---- Table 表格 ----table Table(titlerich 表格, boxbox.ROUNDED)table.add_column(编号, stylecyan, justifyright)table.add_column(名称, stylegreen)table.add_column(状态, styleyellow)table.add_row(1, 任务 A, [green]完成[/green])table.add_row(2, 任务 B, [yellow]进行中[/yellow])table.add_row(3, 任务 C, [red]失败[/red])console.print(table)# ---- Progress 进度条 ----print(\nrich 进度条演示:)with Progress(TextColumn([progress.description]{task.description}),BarColumn(),TextColumn([progress.percentage]{task.percentage:3.0f}%),consoleconsole,) as progress:task progress.add_task([cyan]处理中..., total100)for _ in range(20):time.sleep(0.08)progress.update(task, advance5)# ---- 终端尺寸检测 ----w, h console.sizeconsole.print(f\n终端尺寸: {w} x {h}, styledim)except ImportError:console printprint( rich 未安装跳过演示)print( pip install rich)# # 第四部分综合实用函数——自制进度条与颜色工具# def colored(text, fgNone, bgNone, boldFalse):自制简易彩色文本函数仅 ANSI无需第三方库RESET \033[0mcodes []if bold:codes.append(1)if fg:codes.append(str(30 [k, r, g, y, b, m, c, w].index(fg[0].lower())))if bg:codes.append(str(40 [k, r, g, y, b, m, c, w].index(bg[0].lower())))if codes:return f\033[{;.join(codes)}m{text}{RESET}return textdef progress_bar(percent, width40):自制文本进度条filled int(width * percent / 100)bar █ * filled ░ * (width - filled)color 32 if percent 70 else 33 if percent 90 else 31return f\033[{color}m{bar}\033[0m {percent:.0f}%# ---------- 综合演示 ----------if __name__ __main__:print(控制台输出美化综合演示)print(当前终端编码:, sys.stdout.encoding)demo_ansi_codes()demo_colorama()demo_rich()# 自制进度条演示print(\n * 60)print(【自制 ANSI 进度条】)print( * 60)for p in range(0, 101, 5):bar progress_bar(p)print(f\r 进度: {bar}, end)time.sleep(0.05)print(\n 完成!)# 自制彩色文字演示print(\n自制 colored() 函数:)print(f {colored(红色, fgred)})print(f {colored(绿色加粗, fggreen, boldTrue)})print(f {colored(黄字蓝底, fgyellow, bgblue)})