Python Rich 库打印终端颜色
1. Rich 基础入门
Rich 是一个 用于在终端中输出富文本和精美格式。它支持颜色、样式、表格、进度条、语法高亮、markdown 渲染等多种功能,且跨平台兼容。相比传统的 print 语句,Rich 能让你的终端输出更加专业和美观。
pip install rich
基础使用只需要导入库并创建一个 Console 对象:
from rich.console import Console
console = Console()
console.print("Hello, [bold magenta]Rich[/bold magenta] world!")

2. 文本样式与颜色控制
Rich 最基础也最强大的功能就是对文本样式的控制。它使用类似 BBCode 的标记语法,可以轻松实现粗体、斜体、下划线等效果,同时支持 256 色和真彩色模式。
from rich.console import Console
console = Console()
console.print("这是 [bold red]粗体红色[/bold red] 文字")
console.print("这是 [italic cyan]斜体青色[/italic cyan] 文字")
console.print("这是 [underline green]下划线绿色[/underline green] 文字")
console.print("这是 [reverse yellow]反色黄色[/reverse yellow] 文字")

Rich 还支持直接使用 RGB 值定义颜色:
from rich.console import Console
console = Console()
console.print("这是 [rgb(255,0,255)]自定义紫色[/rgb(255,0,255)] 文字")

from rich.console import Console
console = Console()
console.print("Hello", "World!", style="bold red")

from rich.console import Console
console = Console()
console.print(":smiley: :vampire: :pile_of_poo: :thumbs_up: :raccoon:")

语法高亮显示
from rich.console import Console
from rich.syntax import Syntax
my_code = '''
def iter_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]:
    """Iterate and generate a tuple with a flag for first and last value."""
    iter_values = iter(values)
    try:
        previous_value = next(iter_values)
    except StopIteration:
        return
    first = True
    for value in iter_values:
        yield first, False, previous_value
        first = False
        previous_value = value
    yield first, True, previous_value
'''
syntax = Syntax(my_code, "python", theme="monokai", line_numbers=True)
console = Console()
console.print(syntax)

3. 高级布局与面板
Rich 提供了多种布局组件,可以创建复杂的终端界面。Panel 是最常用的布局组件之一,能够为内容添加边框和标题,显著提升视觉效果。
from rich.console import Console
from rich.panel import Panel
console = Console()
console.print(
    Panel.fit(
        "[green]这是一个带有边框的内容区域[/green]",
        title="标题",
        subtitle="副标题",
        border_style="blue"
    )
)

4. 表格与数据展示
Rich 的表格功能非常强大,支持自动调整列宽、多种边框样式、行列对齐方式等。相比传统的制表符对齐,Rich 表格更加美观。
from rich.console import Console
from rich.table import Table
console = Console()
table = Table(title="员工信息", show_header=True, header_style="bold magenta")
table.add_column("姓名", style="dim")
table.add_column("部门")
table.add_column("薪资")
table.add_row("张三", "技术部", "¥15,000")
table.add_row("李四", "市场部", "¥12,000")
table.add_row("王五", "人事部", "¥10,000")
console.print(table)

5. 进度条与状态指示
Rich 的进度条功能非常适合长时间运行的任务。它支持多种样式、速度估算、任务描述等,能够显著提升用户体验。
from rich.progress import Progress
import time
with Progress() as progress:
    task = progress.add_task("[cyan]处理中...", total=100)
    for i in range(100):
        time.sleep(0.05)  # 模拟工作
        progress.update(task, advance=1, description=f"处理项目 {i+1}")

更复杂的多任务进度条:
from rich.progress import Progress
import time
with Progress(
    "[progress.description]{task.description}",
    "[progress.percentage]{task.percentage:>3.0f}%",
    "•",
    "已用: [progress.elapsed]{task.elapsed}",
    "•",
    "剩余: [progress.remaining]{task.remaining}",
) as progress:
    task1 = progress.add_task("下载文件", total=100)
    task2 = progress.add_task("处理数据", total=200)
    task3 = progress.add_task("生成报告", total=50)
    while not progress.finished:
        progress.update(task1, advance=0.9)
        progress.update(task2, advance=1.8)
        progress.update(task3, advance=0.5)
        time.sleep(0.02)

from time import sleep
from rich.console import Console
console = Console()
tasks = [f"task {n}" for n in range(1, 11)]
with console.status("[bold green]Working on tasks...") as status:
    while tasks:
        task = tasks.pop(0)
        sleep(1)
        console.log(f"{task} complete")

6. 树形结构与层次展示
Rich 的 Tree 功能可以清晰展示层次结构数据,非常适合目录结构、组织架构等场景。
from rich.console import Console
from rich.tree import Tree
console = Console()
tree = Tree("公司组织架构")
开发部 = tree.add("技术部")
开发部.add("后端组")
开发部.add("前端组")
开发部.add("测试组")
市场部 = tree.add("市场部")
市场部.add("推广组")
市场部.add("策划组")
console.print(tree)

更复杂的树形结构,可以添加样式和图标:
from rich.console import Console
from rich.tree import Tree
from rich.text import Text
console = Console()
tree = Tree("📁 项目目录", guide_style="bold bright_blue")
src = tree.add("📁 src")
src.add("📄 __init__.py")
src.add("📄 main.py")
tests = tree.add("📁 tests")
unit = tests.add("📁 unit")
unit.add("📄 test_utils.py")
unit.add("📄 test_models.py")
docs = tree.add("📁 docs")
docs.add("📄 README.md")
docs.add("📄 CHANGELOG.md")
console.print(tree)

7. Rich 检查
Rich 有一个 inspect 函数,它可以生成任何 Python 对象(例如 class、instance 或 builtin)的报告。
my_list = ["foo", "bar"] from rich import inspect inspect(my_list, methods=True)

                    
                
                
            
        
浙公网安备 33010602011771号