Project Icon

rich

Python终端文本美化和格式化工具

Rich是一个开源Python库,用于增强终端输出的文本效果和格式。它提供简洁的API,支持添加颜色、样式、表格、进度条等丰富元素。Rich还能渲染Markdown、语法高亮和跟踪信息,适用于Linux、macOS和Windows平台,兼容Python 3.7+版本。开发者可将其轻松集成到项目中,改善调试体验和终端交互。

支持的Python版本 PyPI版本

下载量 codecov Rich博客 Twitter关注

Logo

英文readme简体中文 readme正體中文 readme西班牙语 readme德语 readme瑞典语 readme日语 readme韩语 readme法语 readme瑞士德语 readme印地语 readme巴西葡萄牙语 readme意大利语 readme俄语 readme印尼语 readme波斯语 readme土耳其语 readme波兰语 readme

Rich是一个Python库,用于在终端中呈现丰富的文本和美观的格式。

Rich API使得在终端输出中添加颜色和样式变得简单。Rich还可以渲染漂亮的表格、进度条、Markdown、语法高亮的源代码、回溯等——开箱即用。

特性

如需Rich的视频介绍,请查看@fishnets88制作的calmcode.io

看看人们对Rich的评价

兼容性

Rich适用于Linux、macOS和Windows。真彩色/emoji在新版Windows Terminal上可用,经典终端限制为16种颜色。Rich需要Python 3.7或更高版本。

Rich无需额外配置即可与Jupyter notebooks配合使用。

安装

使用pip或你喜欢的PyPI包管理器安装。

python -m pip install rich

运行以下命令在你的终端上测试Rich输出:

python -m rich

Rich打印

要轻松地为你的应用添加富文本输出,你可以导入rich print方法,它与Python内置的print函数具有相同的签名。试试这个:

from rich import print

print("你好,[bold magenta]世界[/bold magenta]!", ":vampire:", locals())

Hello World

Rich REPL

Rich可以安装在Python REPL中,这样任何数据结构都将被美化打印和高亮显示。

>>> from rich import pretty
>>> pretty.install()

REPL

使用Console

要更好地控制富终端内容,导入并构造一个Console对象。

from rich.console import Console

console = Console()

Console对象有一个print方法,其接口与内置的print函数有意相似。以下是使用示例:

console.print("你好", "世界!")

正如你所料,这会在终端中打印出"Hello World!"。请注意,与内置的print函数不同,Rich会根据终端宽度自动换行显示你的文本。

有几种方法可以为输出添加颜色和样式。你可以通过添加style关键字参数来为整个输出设置样式。这里有一个例子:

console.print("Hello", "World!", style="bold red")

输出结果会类似于下面这样:

Hello World

这种方式适用于一次性为一行文本设置样式。对于更细粒度的样式设置,Rich提供了一种特殊的标记语法,类似于bbcode。这里有一个例子:

console.print("有[bold cyan]志者[/bold cyan],事[u]竟[/u][i]成[/i]。")

Console Markup

你可以使用Console对象轻松生成复杂的输出。详细信息请参阅Console API文档。

Rich检查

Rich有一个inspect函数,可以生成任何Python对象(如类、实例或内置对象)的报告。

>>> my_list = ["foo", "bar"]
>>> from rich import inspect
>>> inspect(my_list, methods=True)

Log

详细信息请参阅inspect文档

Rich库

Rich包含多个内置的_可渲染对象_,你可以用它们在CLI中创建优雅的输出,并帮助你调试代码。

点击以下标题查看详情:

日志

Console对象有一个log()方法,其接口类似于print(),但还会显示当前时间以及调用该方法的文件和行号。默认情况下,Rich会对Python结构和repr字符串进行语法高亮。如果你记录一个集合(如字典或列表),Rich会对其进行美化打印,使其适应可用空间。以下是一些这些功能的示例。

from rich.console import Console
console = Console()

test_data = [
    {"jsonrpc": "2.0", "method": "sum", "params": [None, 1, 2, 4, False, True], "id": "1",},
    {"jsonrpc": "2.0", "method": "notify_hello", "params": [7]},
    {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": "2"},
]

def test_log():
    enabled = False
    context = {
        "foo": "bar",
    }
    movies = ["死侍", "天行者崛起"]
    console.log("来自", console, "的问候!")
    console.log(test_data, log_locals=True)


test_log()

上面的代码产生以下输出:

Log

注意log_locals参数,它会输出一个包含调用log方法处局部变量的表格。

log方法可用于长时间运行的应用程序(如服务器)的终端日志记录,同时也是一个非常好的调试辅助工具。

日志处理器

你还可以使用内置的Handler类来格式化和着色Python日志模块的输出。以下是输出示例:

Logging

表情符号

要在控制台输出中插入表情符号,只需将表情符号名称放在两个冒号之间。这里有一个例子:

>>> console.print(":smiley: :vampire: :pile_of_poo: :thumbs_up: :raccoon:")
😃 🧛 💩 👍 🦝

请谨慎使用此功能。

表格

Rich可以使用unicode字符渲染灵活的表格。它提供了大量的格式化选项,包括边框、样式、单元格对齐等。

table movie

上面的动画是使用examples目录中的table_movie.py生成的。

这里有一个更简单的表格示例:

from rich.console import Console
from rich.table import Table

console = Console()
table = Table(show_header=True, header_style="bold magenta")
table.add_column("日期", style="dim", width=12)
table.add_column("标题")
table.add_column("制作预算", justify="right")
table.add_column("票房", justify="right")
table.add_row(
    "2019年12月20日", "星球大战:天行者崛起", "2.75亿美元", "3.75126118亿美元"
)
table.add_row(
    "2018年5月25日",
    "[red]索罗[/red]:星球大战外传",
    "2.75亿美元",
    "3.93151347亿美元",
)
table.add_row(
    "2017年12月15日",
    "星球大战8:最后的绝地武士",
    "2.62亿美元",
    "[bold]13.32539889亿美元[/bold]",
)

console.print(table)

这会产生以下输出:

表格

请注意,控制台标记的渲染方式与print()log()相同。事实上,任何Rich可渲染的内容都可以包含在表头/行中(甚至包括其他表格)。

Table类足够智能,能够调整列的大小以适应终端的可用宽度,并根据需要换行文本。以下是同一示例,但终端比上面的表格更小:

表格2

进度条

Rich可以渲染多个无闪烁的进度条来跟踪长时间运行的任务。

对于基本用法,将任何序列包装在track函数中并迭代结果。这里有一个例子:

from rich.progress import track

for step in track(range(100)):
    do_step(step)

添加多个进度条也不难。这里有一个从文档中摘取的例子:

进度

可以配置列以显示您想要的任何详细信息。内置列包括完成百分比、文件大小、文件速度和剩余时间。这里是另一个显示正在进行的下载的例子:

进度

要自己尝试这个,请查看examples/downloader.py,它可以同时下载多个URL并显示进度。

状态

对于难以计算进度的情况,您可以使用status方法,它会显示一个"旋转器"动画和消息。这个动画不会阻止您正常使用控制台。这里有一个例子:

from time import sleep
from rich.console import Console

console = Console()
tasks = [f"任务 {n}" for n in range(1, 11)]

with console.status("[bold green]正在处理任务...") as status:
    while tasks:
        task = tasks.pop(0)
        sleep(1)
        console.log(f"{task} 完成")

这在终端中生成以下输出。

状态

旋转器动画借鉴自cli-spinners。您可以通过指定spinner参数来选择旋转器。运行以下命令查看可用的值:

python -m rich.spinner

上述命令在终端中生成以下输出:

旋转器

树形结构

Rich可以渲染带有指引线的树形结构。树形结构非常适合显示文件结构或任何其他层次数据。

树的标签可以是简单的文本或Rich可以渲染的任何其他内容。运行以下命令进行演示:

python -m rich.tree

这生成以下输出:

markdown

查看tree.py示例,了解一个可以显示任何目录的树形视图的脚本,类似于Linux的tree命令。

Rich可以以整齐的形式渲染内容,列宽可以相等或最优化。这里有一个非常基本的(MacOS / Linux)ls命令克隆,它以列的形式显示目录列表:

import os
import sys

from rich import print
from rich.columns import Columns

directory = os.listdir(sys.argv[1])
print(Columns(directory))

以下截图是columns示例的输出,它以列的形式显示从API获取的数据:

列

Markdown Rich 可以渲染 [markdown](https://rich.readthedocs.io/en/latest/markdown.html),并能合理地将格式转换为终端显示。

要渲染 markdown,请导入 Markdown 类并使用包含 markdown 代码的字符串构造它。然后将其打印到控制台。以下是一个示例:

from rich.console import Console
from rich.markdown import Markdown

console = Console()
with open("README.md") as readme:
    markdown = Markdown(readme.read())
console.print(markdown)

这将产生类似以下的输出:

markdown

语法高亮

Rich 使用 pygments 库来实现语法高亮。使用方法类似于渲染 markdown;构造一个 Syntax 对象并将其打印到控制台。以下是一个示例:

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)

这将产生以下输出:

syntax

回溯

Rich 可以渲染美观的回溯,比标准 Python 回溯更易读且显示更多代码。你可以将 Rich 设置为默认的回溯处理程序,这样所有未捕获的异常都将由 Rich 渲染。

以下是在 OSX 上的显示效果(Linux 上类似):

traceback

所有 Rich 可渲染对象都使用控制台协议,你也可以使用它来实现自己的 Rich 内容。

Rich CLI

另请参阅 Rich CLI,这是一个由 Rich 驱动的命令行应用程序。直接从命令提示符语法高亮代码、渲染 markdown、以表格形式显示 CSV 等。

Rich CLI

Textual

另请参阅 Rich 的姊妹项目 Textual,你可以用它在终端中构建复杂的用户界面。

Textual 截图

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号