绚烂之境:Python Rich,让终端输出更炫酷!

转载请注明出处❤️

作者:测试蔡坨坨

原文链接:caituotuo.top/c8c7bd95.html


初识rich

你好,我是测试蔡坨坨。

在代码的世界里,每一行都是一个故事,每一个变量都是一个角色,而打印则是展示这些故事与角色的窗口。然而,这个窗口并非都是朴实无华的,有时候,我们需要一种更加「艺术」的方式来展示我们的故事。Python中的rich库便是一位大师级的艺术家,为我们的终端带来了绚丽的色彩和丰富的细节。

当我们涉足爬虫的世界时,往往需要在终端界面上输出各种信息,比如爬取进度、数据摘要等等。然而,传统的打印方式显得呆板乏味,无法完全展现我们所想表达的意境。这时候,rich库便是我们的得力助手。

让我们想象一下,在爬取数据的过程中,我们不仅仅是机械地输出进度信息,而是将终端界面变成了一个充满艺术气息的画布。比如,我们可以利用rich库的各种丰富功能,给不同类型的信息赋予不同的颜色、样式、甚至动画效果。这样一来,打印出来的信息不再是单调的文字,而是一幅幅生动的画面,让人仿佛置身于一个色彩斑斓的世界之中。

以爬取网易云音乐为例:

效果演示:https://www.caituotuo.top/videos/20240330_194828.mp4

PS:需要源码的加文末VX领取。

除此之外,rich库还可以在其他领域展现其艺术魅力。比如,在数据分析与可视化中,我们可以利用rich库将分析结果以更加美观的方式展示出来;在机器学习与深度学习中,我们可以利用rich库将模型训练的过程以动画的形式展现出来,让人一目了然地看到模型是如何不断优化的。

说了这么多,不如来一睹为快,看看如何运用吧。

rich的使用

官方文档:https://github.com/Textualize/rich

应用场景:

  • 丰富的文本样式:rich 支持斜体、粗体、下划线等各种文本样式,让文字更具有表现力。
  • 多彩的颜色支持:通过 rich,可以为文字、背景和边框添加各种各样的颜色,使得终端输出更加生动。
  • 强大的布局选项:rich 提供了灵活的布局选项,可以轻松创建表格、树状结构等复杂的排版效果。
  • 支持图像输出:除了文字信息,rich 还支持在终端中输出图片,让你的输出更具有视觉冲击力。
  • 动画效果:rich 还支持在终端中播放动画,为用户呈现出更加生动的交互体验。

安装

bash 复制代码
pip install rich

安装完成后,输入python rich -m可以查看它的特性(Win10系统推荐使用Windows terminal效果更佳):

可以看出rich支持输出各种颜色、多语言文字、表格、Markdown、代码块、进度条,甚至emoji表情......

rich print

第一个简单的例子,打印locals()变量里面的一些属性:

python 复制代码
from rich import print

print("Hello, [bold magenta]CaiTuotuo[/bold magenta]!", ":vampire:", locals())

彩色文字

使用Console对象输出彩色文字:

python 复制代码
from rich.console import Console

console = Console()

console.print("Hello", "测试蔡坨坨!", style="bold green")

打印表格

python 复制代码
from rich.console import Console
from rich.table import Table

console = Console()

table = Table(show_header=True, header_style="bold magenta")
table.add_column("Date", style="dim", width=12)
table.add_column("Title")
table.add_column("Production Budget", justify="right")
table.add_column("Box Office", justify="right")
table.add_row(
    "Dec 20, 2019", "Star Wars: The Rise of Skywalker", "$275,000,000", "$375,126,118"
)
table.add_row(
    "May 25, 2018",
    "[red]Solo[/red]: A Star Wars Story",
    "$275,000,000",
    "$393,151,347",
)
table.add_row(
    "Dec 15, 2017",
    "Star Wars Ep. VIII: The Last Jedi",
    "$262,000,000",
    "[bold]$1,332,539,889[/bold]",
)

console.print(table)

进度条

使用progress模块输出进度条:

python 复制代码
import time
from rich.progress import track


def do_step(step):
    time.sleep(0.1)


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

以上主要介绍了rich常见的用法,更多的使用场景可参考官方给出的example:

其中,几个比较有意思的,比如Spinners.py输出各种会动的emoji:

python 复制代码
from time import sleep

from rich.columns import Columns
from rich.panel import Panel
from rich.live import Live
from rich.text import Text
from rich.spinner import Spinner, SPINNERS

all_spinners = Columns(
    [
        Spinner(spinner_name, text=Text(repr(spinner_name), style="green"))
        for spinner_name in sorted(SPINNERS)
    ],
    column_first=True,
    expand=True,
)

with Live(
        Panel(all_spinners, title="Spinners", border_style="blue"),
        refresh_per_second=20,
) as live:
    while True:
        sleep(1)

彩虹文字:

python 复制代码
from random import randint

from rich import print
from rich.highlighter import Highlighter


class RainbowHighlighter(Highlighter):
    def highlight(self, text):
        for index in range(len(text)):
            text.stylize(f"color({randint(16, 255)})", index, index + 1)


rainbow = RainbowHighlighter()
print(rainbow("台下的少年呐,要是你看懂了天外来物,长大了,记得拯救世界!"))

综上

总的来说,Python中的rich库为我们提供了一种全新的打印方式,让我们能够以更加艺术的方式来展示我们的代码与数据。在这个丰富多彩的终端世界里,每一行代码都是一幅画,每一个变量都是一个色彩斑斓的角色,让人仿佛置身于一个充满想象力与创造力的境界之中。

让我们一起踏上这场绚烂之旅,探索Python中的艺术打印之美!

相关推荐
B站_计算机毕业设计之家3 分钟前
豆瓣电影数据采集分析推荐系统 | Python Vue Flask框架 LSTM Echarts多技术融合开发 毕业设计源码 计算机
vue.js·python·机器学习·flask·echarts·lstm·推荐算法
渣渣苏10 分钟前
Langchain实战快速入门
人工智能·python·langchain
lili-felicity19 分钟前
CANN模型量化详解:从FP32到INT8的精度与性能平衡
人工智能·python
数据知道22 分钟前
PostgreSQL实战:详解如何用Python优雅地从PG中存取处理JSON
python·postgresql·json
ZH154558913135 分钟前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
玄同76536 分钟前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
User_芊芊君子41 分钟前
CANN010:PyASC Python编程接口—简化AI算子开发的Python框架
开发语言·人工智能·python
白日做梦Q1 小时前
Anchor-free检测器全解析:CenterNet vs FCOS
python·深度学习·神经网络·目标检测·机器学习
喵手1 小时前
Python爬虫实战:公共自行车站点智能采集系统 - 从零构建生产级爬虫的完整实战(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集公共自行车站点·公共自行车站点智能采集系统·采集公共自行车站点导出csv
喵手1 小时前
Python爬虫实战:地图 POI + 行政区反查实战 - 商圈热力数据准备完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·地区poi·行政区反查·商圈热力数据采集