Rich最近增加了两个有趣的新功能。
第一个功能是支持SVG。用Rich打印到终端的任何东西都可以被捕获并导出为SVG文件。该输出有点像屏幕截图,但在Rich本身中生成(它不会偷看你的桌面)。
© 2022 Will McGugan
从Rich生成的SVG(转换为PNG)。
我认为这些SVG对于分享终端输出是很有用的,特别是对于文档。
保存SVG的API与保存/导出文本和HTML的方法的工作方式相同。下面是生成上述图片的代码。
from rich.console import Console
from rich.table import Table
table = Table(title="Star Wars Movies")
table.add_column("Released", style="cyan", no_wrap=True)
table.add_column("Title", style="magenta")
table.add_column("Box Office", justify="right", style="green")
table.add_row("Dec 20, 2019", "Star Wars: The Rise of Skywalker", "$952,110,690")
table.add_row("May 25, 2018", "Solo: A Star Wars Story", "$393,151,347")
table.add_row("Dec 15, 2017", "Star Wars Ep. V111: The Last Jedi", "$1,332,539,889")
table.add_row("Dec 16, 2016", "Rogue One: A Star Wars Story", "$1,332,439,889")
console = Console(record=True)
console.print(table, justify="center")
console.save_svg("table.svg", title="save_table_svg.py")
import os
import webbrowser
webbrowser.open(f"file://{os.path.abspath('table.svg')}")
第二个新功能是由Martin Larralde贡献的,他经常需要处理大型数据集,在那里你可能想看到一个进度条。如果读取文件的代码不在你的控制范围内,整合Rich的进度条就很难做到。例如,如果你使用标准库中的json.load -- 没有简单的挂钩来更新进度条。
马丁的解决方案是将类文件对象包裹到该读数中,并寻求相应地更新进度条。这样,当你把一个类文件对象传递给第三方API时,你会得到一个进度条,跟踪该文件已经被读取多少。
下面是你如何读取和解码一个大型JSON文件并显示进度。
import json
import rich.progress
with rich.progress.open("cats.json") as cats_file:
data = json.load(cats_file)
现在添加一个进度条可以像用rich.progress.open 替换open 一样简单。