絢爛之境:Python Rich,讓終端輸出更炫酷!

测试蔡坨坨發表於2024-03-30

轉載請註明出處❤️

作者:測試蔡坨坨

原文連結: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 還支援在終端中播放動畫,為使用者呈現出更加生動的互動體驗。

安裝

pip install rich

安裝完成後,輸入python rich -m可以檢視它的特性(Win10系統推薦使用Windows terminal效果更佳):

可以看出rich支援輸出各種顏色、多語言文字、表格、Markdown、程式碼塊、進度條,甚至emoji表情……

rich print

第一個簡單的例子,列印locals()變數裡面的一些屬性:

from rich import print

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

彩色文字

使用Console物件輸出彩色文字:

from rich.console import Console

console = Console()

console.print("Hello", "測試蔡坨坨!", style="bold green")

列印表格

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模組輸出進度條:

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:

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)

彩虹文字:

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中的藝術列印之美!

相關文章