Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。
本系列将会陆续整理分享一些有趣、有用的第三方库。
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj
提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Python_Ecosystem
pip install rich
https://github.com/Textualize/rich
python -m rich

-
示例 1:彩色文本输出
使用 Rich 的最快速方法是导入替代的 print 函数,它与内置的 print 函数具有相同的参数,可以作为内置 print 的直接替代品。如果不想覆盖 Python 的内置 print 函数,可以将 rich.print 导入为 rprint。
然后就可以像平时一样将字符串或对象打印到终端。Rich 会对输出进行基本的语法高亮,并格式化数据结构以使其更易读。字符串可以包含控制台标记(Console Markup),用于在输出中插入颜色和样式,关于Console Markup的具体内容可以查看官方文档:
https://rich.readthedocs.io/en/latest/markup.html#console-markup
from rich import print
print("[bold red]Hello, [green]World![/green][/bold red]", locals())
将在终端中输出以下内容(包括所有颜色和样式):

-
示例 2:使用 Console类
Console 类是 Rich 库的核心组件,提供了更多的控制选项,用于控制终端输出的格式、颜色、样式等。
如果需要对终端中的富文本内容进行更多控制,可以导入并构造一个 Console 对象。Console 对象有一个 print 方法,其接口与内置的 print 函数相似。与内置的 print 函数不同,Rich 会自动对文本进行换行,以适应终端的宽度。
from rich.console import Console
# 创建一个 Console 对象
console = Console()
# 通过 style 关键字参数来为整个输出设置样式
console.print("Hello", "World!", style="bold red")
-
示例 3:插入表情符号
在终端输出中插入表情符号时,只需将名称放在两个冒号之间即可。
from rich.console import Console
console = Console()
console.print("Hello! :wave:", style="bold green")
console.print("Python is awesome! :snake:", style="bold red")
console.print("Let's celebrate! :party_popper:", style="bold magenta")
将在终端中输出以下内容:

-
示例 4:绘制表格
Rich 可以使用 Unicode 框线字符渲染灵活的表格。它提供了丰富的格式化选项,包括边框样式、样式、单元格对齐等。
from rich.console import Console
# Table 类用于创建和管理表格
from rich.table import Table
# 创建一个 Console 对象
console = Console()
# 创建一个 Table 对象
# show_header=True 表示显示表格的表头
# header_style="bold magenta" 表示表头的样式为加粗且颜色为洋红色
table = Table(show_header=True, header_style="bold magenta")
# 向表格中添加一个名为 "Name" 的列
# justify="center" 表示该列中的内容居中对齐
# style="cyan" 表示该列中的内容颜色为青色
table.add_column("Name", justify="center", style="cyan", no_wrap=True)
# 向表格中添加一个名为 "Age" 的列
# 未指定其他参数时,使用默认的对齐方式(左对齐)和样式
table.add_column("Age")
# 向表格中添加一个名为 "City" 的列
# width=10 表示该列的宽度固定为 10 个字符
# no_wrap=True 表示该列中的内容不进行换行处理
table.add_column("City", justify="right", style="green", width=10, no_wrap=True)
# 依次向表格中添加行数据
table.add_row("Alice", "25", "New York")
table.add_row("Bob", "30", "Los Angeles")
table.add_row("Charlie", "35", "Chicago")
console.print(table)
将在终端中输出以下内容:

-
示例 5:语法高亮
Rich 可以通过行号高亮显示各种编程语言的语法。
要高亮显示代码,需要构建一个语法对象并将其打印到控制台。也可以使用 from_path() 替代构造函数,它将从磁盘加载代码并自动检测文件类型。
from rich.console import Console
# Syntax 类用于对代码进行语法高亮处理
from rich.syntax import Syntax
# 创建一个 Console 对象
console = Console()
# 定义一个字包含 Python 代码符串变量
code = """
def hello_world():
print("Hello, World!")
"""
# 创建一个 Syntax 对象
# 第一个参数 code 是要进行语法高亮处理的代码字符串
# 第二个参数 "python" 指明代码的语言为 Python
# 第三个参数 theme="monokai" 指定语法高亮的主题为 Monokai 主题
# 第四个参数 line_numbers=True 表示在显示代码时显示行号
syntax = Syntax(code, "python", theme="monokai", line_numbers=True)
# 使用 Console 对象的 print 方法将经过语法高亮处理的代码输出到终端
console.print(syntax)
将在终端中输出以下内容:

-
示例 6:进度条
Rich 提供了两种主要的方式来显示进度条:Progress 类和 track 函数。
-
track函数:
track 函数是一个更简单的工具,适合快速为迭代对象添加进度条。它不需要手动管理任务,只需将迭代对象传递给 track 即可。
from rich.progress import track
import time
# 为 range(100) 添加进度条
for _ in track(range(100), description="Processing..."):
time.sleep(0.02)
终端显示效果:

-
Progress 类:
Progress 类是一个更灵活、功能更强大的工具,适合需要自定义进度条的场景。它可以同时管理多个任务,并且支持动态添加任务、更新描述、设置总步数等。
import time
from rich.progress import Progress
# 使用 with 语句创建 Progress 对象,确保资源在使用后正确释放
with Progress() as progress:
# 为每个任务添加进度条,并设置任务描述和总工作量
task1 = progress.add_task("[cyan]Task 1", total=100)
task2 = progress.add_task("[magenta]Task 2", total=200)
task3 = progress.add_task("[yellow]Task 3", total=150)
# 模拟任务执行,直到所有任务完成
while not progress.finished:
# 如果任务 1 未完成,则更新其进度
if not progress.tasks[0].finished:
progress.update(task1, advance=1)
# 如果任务 2 未完成,则更新其进度
if not progress.tasks[1].finished:
progress.update(task2, advance=2)
# 如果任务 3 未完成,则更新其进度
if not progress.tasks[2].finished:
progress.update(task3, advance=1.5)
# 模拟任务执行的延迟,使进度条更新更直观
time.sleep(0.1)
终端显示效果:

-
示例 7:Markdown 渲染
Rich 可以将 Markdown 输出到控制台。 要呈现 Markdown,只需构建一个 Markdown 对象,然后将其打印到控制台即可。 Markdown 是为命令行应用程序添加丰富内容的好方法。
from rich.console import Console
from rich.markdown import Markdown
console = Console()
markdown = """
# Heading 1
## Heading 2
### Heading 3
- Item 1
- Item 2
- Item 3
"""
# 构建一个 Markdown 对象
md = Markdown(markdown)
console.print(md)
终端显示效果:

-
示例 8:树形结构输出
Rich 有一个可以在终端生成树状视图的 Tree 类。 树形视图是展示文件系统内容或任何其他分层数据的绝佳方式。 树形视图的每个分支都可以有一个标签,标签可以是文本,也可以是任何其他丰富的呈现形式。
from rich.console import Console
# Tree 类用于创建和管理树形结构,能够方便地添加分支和叶子节点
from rich.tree import Tree
# 创建一个 Console 对象,后续将使用该对象来输出内容到终端
console = Console()
# 创建一个 Tree 对象,作为树形结构的根节点,根节点名称为 "Root"
tree = Tree("[bold]Root")
# 向根节点添加一个分支,分支名称为 "Branch 1/",并使用富文本样式设置为红色加粗
branch1 = tree.add("[red bold]Branch 1/")
# 向 branch1 分支添加一个叶子节点
branch1.add("Leaf 1")
# 向 branch1 分支再添加一个叶子节点
branch1.add("Leaf 2")
# 向根节点添加另一个分支,分支名称为 "Branch 2/",并使用富文本样式设置为绿色加粗
branch2 = tree.add("[green bold]Branch 2/")
# 向 branch2 分支添加一个叶子节点,叶子节点名称为 "Leaf 3"
branch2.add("Leaf 3")
# 使用 Console 对象的 print 方法将构建好的树形结构输出到终端
console.print(tree)
终端显示效果:

运行以下命令可查看丰富树形视图的演示:
python -m rich.tree
-
示例 9:创建布局
Rich 提供了一个 Layout 类,可以用来将屏幕区域划分为多个部分,每个部分可以包含独立的内容。它可以与 Live Display 一起用于创建全屏“应用程序”,也可以单独使用。
# Layout 类用于在终端中创建复杂的布局结构
from rich.layout import Layout
# Panel 类用于创建带有边框和标题的面板,可用于展示内容
from rich.panel import Panel
# Console 类用于与终端进行交互,将内容输出到终端
from rich.console import Console
# 创建一个 Layout 对象,它将作为整个布局的基础
layout = Layout()
# 使用 split_column 方法将布局对象进行垂直分割
# 这里分割成两个部分,分别命名为 "upper"(上部分)和 "lower"(下部分)
# 设置区域的大小均为 10(可以理解为高度占比,具体取决于终端环境)
layout.split_column(
Layout(name="upper", size=10),
Layout(name="lower", size=10)
)
# 对上一步分割出的 "lower" 部分再进行水平分割
# 使用 split_row 方法将 "lower" 部分分割成左右两部分,分别命名为 "left"(左部分)和 "right"(右部分)
# 设置左部分区域的大小为 80(可以理解为宽度占比,具体取决于终端环境)
layout["lower"].split_row(
Layout(name="left", size=80),
Layout(name="right"),
)
# 创建一个 Panel 对象,为面板设置标题及显示文本
left_panel = Panel("This is the left side of the layout.", title="Left Panel")
# 将创建好的面板更新到布局中名为 "left" 的区域
layout["left"].update(left_panel)
# 创建一个 Panel 对象,为面板设置标题及显示文本
right_panel = Panel("This is the right side of the layout.", title="Right Panel")
# 将创建好的面板更新到布局中名为 "right" 的区域
layout["right"].update(right_panel)
# 创建一个 Console 对象,用于后续将布局输出到终端
console = Console()
# 使用 Console 对象的 print 方法将整个布局打印输出到终端
console.print(layout)
终端显示效果:

更多内容可以前往官方文档查看:
https://rich.readthedocs.io/en/latest/


本篇文章来源于微信公众号: 码农设计师