轉載請註明出處❤️
作者:測試蔡坨坨
原文連結: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中的藝術列印之美!