Rich
概述
Rich库为Python提供了丰富的控制台输出功能,支持打印文本、文本格式化、面板、进度条、树形结构和实时更新等多种使用场景。通过这些功能,可以创建更加美观和交互性强的控制台应用程序。
安装
首先需要安装rich库:
pip install rich
如果打算将Rich与Jupyter一起使用,那么需要执行以下命令安装一些额外的依赖项:
pip install "rich[jupyter]"
示例用法
Rich提供了丰富的操作文档,更多用法请参阅:Rich文档
打印文本
启动并运行Rich的最快方法是导入替代print函数,该函数采用与内置函数相同的参数print,可以用作直接替换
使用print函数可以打印带有格式的文本。
from rich import print
print("[bold magenta]Hello[/bold magenta] World!")
样式说明:
[bold magenta]:这部分指定了文本的样式
bold 表示加粗。
magenta 表示文本颜色为品红色
Hello:这是被格式化的文本,应用了上面的样式。
[/bold magenta]:这是样式的结束标记,表示接下来的文本不再使用 bold 和 magenta 样式
输出 :
Console
为了完全控制终端格式,Rich提供了一个Console类。大多数应用程序都需要一个控制台实例,因此可能希望在模块级别创建一个,或将其作为顶级对象的属性。
例如:1.可以将一个名为“console.py”的文件添加到项目中
from rich.console import Console
console = Console()
2.然后可以从项目的任何位置导入控制台
from my_project.console import console
使用示例:
from rich.console import Console
# 创建 Console 实例
console = Console()
# 打印当前的局部变量 内容可能较多
# console.print(locals())
# 其他打印
console.print([1, 2, 3])
console.print("[blue underline]Looks like a link")
console.print("FOO", style="white on blue")
# 对齐
style = "bold white on magenta"
console.print("Rich", style=style)
console.print("Rich", style=style, justify="left")
console.print("Rich", style=style, justify="center")
console.print("Rich", style=style, justify="right")
# 控制台有一个style属性,可以使用它来将样式应用于打印的所有内容
from rich.console import Console
blue_console = Console(style="white on blue")
blue_console.print("I'm blue. Da ba dee da ba di.")
# 日志记录
console.log("Hello, World!")
# 打印JSON
console.print_json('[false, true, null, "foo"]')
输出:
文本格式化
使用 Text 类可以创建带有样式的文本,例如加粗、颜色、背景等。
创建一个红色加粗文本并在黄色背景上显示。
from rich.console import Console
from rich.text import Text
# 创建 Console 实例
console = Console()
# 文本格式化
text = Text("这是一个文本示例", style="bold red on yellow")
console.print(text)
输出:
面板
使用 Panel 类可以创建带有边框和标题的面板,适合展示信息或分隔内容。
from rich.console import Console
from rich.panel import Panel
# 创建 Console 实例
console = Console()
# 面板
panel = Panel("这是一个面板示例", title="面板标题", border_style="blue")
console.print(panel)
输出:
树形结构
使用 Tree 类可以创建层级结构的展示,适合展示目录、分类等。
创建一个简单的树形结构
from rich.console import Console
from rich.tree import Tree
# 创建 Console 实例
console = Console()
# 创建树形结构
tree = Tree("根节点")
subtree = tree.add("子节点 1")
subtree.add("子节点 1.1")
subtree.add("子节点 1.2")
tree.add("子节点 2")
# 打印树形结构
console.print(tree)
输出:
使用进度条
使用rich库中的Progress类来创建一个进度条,支持动态更新
注意:在Jupyter中使用,需要额外安装:
pip install ipywidgets
# 从 rich.progress 模块导入了 Progress 类,用于创建和管理进度条
from rich.progress import Progress
import time
# 创建一个上下文管理器,确保在代码块结束时自动清理进度条。
with Progress() as progress:
# 添加一个新的任务到进度条
# "[cyan]Processing..." 是任务的描述,使用了 cyan(青色)样式。
# total=100 指定了任务的总进度(100%)
task = progress.add_task("[cyan]Processing...", total=100)
# while 循环会持续运行,直到 progress.finished 为 True,即所有任务完成
while not progress.finished:
# 更新任务的进度
# 表示将任务的进度增加 1(每次循环增加 1%)
progress.update(task, advance=1)
# 模拟任务执行时间
time.sleep(0.1)
输出:
实时更新
使用 Live 类可以在控制台中实时更新内容,适合展示动态变化的信息。
模拟处理任务并实时更新显示内容
from rich.console import Console
from rich.live import Live
# 创建 Console 实例
console = Console()
# 实时更新
with Live(console=console) as live:
for i in range(10):
live.update(f"正在处理第 {i + 1} 个任务...")
time.sleep(0.5) # 模拟处理时间
输出 :
使用表格
使用rich库中的Console和Table类来创建并显示一个格式化的表格。
from rich.console import Console
from rich.table import Table
console = Console()
table = Table(title="示例表格")
table.add_column("姓名", justify="left", style="cyan", no_wrap=True)
table.add_column("年龄", justify="right", style="magenta")
table.add_column("城市", justify="right", style="green")
table.add_row("Alice", "24", "New York")
table.add_row("Bob", "30", "Los Angeles")
table.add_row("Charlie", "29", "Chicago")
console.print(table)
输出:
使用Markdown
使用rich库中的Markdown类来渲染Markdown格式的文本。
# 导入 Markdown 类,用于解析和渲染 Markdown 格式的文本
from rich.markdown import Markdown
# 导入 Console 类,用于输出到控制台。
from rich.console import Console
# 创建一个 Console 实例,用于打印内容
console = Console()
# 创建一个 Markdown 实例,传入 Markdown 格式的字符串。
markdown_text = """
# 欢迎使用 Rich 库
这是一个 **Rich** 示例,展示了如何在控制台中使用 Markdown。
## 列表
- 项目 1
- 项目 2
- 项目 3
## 链接
访问 [Rich 文档](https://rich.readthedocs.io/en/stable/) 了解更多信息。
## 代码块
```python
print("Hello, World!")
"""
markdown = Markdown(markdown_text)
# 使用 console.print() 方法将渲染后的 Markdown 输出到控制台。
console.print(markdown)
输出: