php 热搜 代码,上热搜了这款工具可以让代码终端变「高逼格」

本文介绍了Python的Rich库,该库提供了丰富文本、漂亮格式、表情符号、表格、进度条、语法高亮等功能,适用于Linux、OSX和Windows。通过简单示例展示了如何使用Rich进行打印、在REPL中美化输出、语法高亮、控制台记录、回溯、创建表格和进度条,以及呈现Markdown内容,极大地提升了终端输出的可读性和美观性。
摘要由CSDN通过智能技术生成

工作中你是否使用终端比基于 GUI 更多?最近一款名为 Rich 的 Python 库上了热搜!截止目前,它已经拥有 1.55 万颗星了。

Rich 是一个非常强大的 Python 库,不仅在终端中提供丰富的文本和漂亮的格式,还可以显示表情符号、表格、进度条、标记,甚至可以让语法突出显示。下面我就来详细介绍一下这款神器吧!

简介及安装

6b65f9b716189b1e3fa525a6fa999b02.png上图显示了库可以的主要功能。

该库适用于 Linux、OSX 和 Windows,只需要 Python 3.6.1 或更高就能正常工作,同时安装库非常简单。pip install rich

丰富的打印功能

想毫不费力地将 Rich 的输出功能添加到你的应用程序中,只需导入rich 打印的方法,该方法和其他 Python 的自带功能的参数类似。你可以试试:from rich import print

print("Hello, [bold magenta]World[/bold magenta]!", ":vampire:", locals())9317d068eff8f9658625c7676f089aac.png

丰富的 Repl

Rich 可以安装在 Python REPL 中,以便任何数据结构都将打印和突出显示。>>>from rich import pretty

>>>pretty.install()5048798fadbb6ec8c09b537c0c5097ae.png

语法突出显示

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)f194195e5143235044fb0b96d4876f43.png

使用控制台

想要对 Rich 终端内容进行更多控制,我们导入并构造一个控制台对象。from rich.console import Console

console = Console()

Console 对象含有一个print 方法,它的界面与 python 内置的print功能界面相似。

你可以试试:console.print("Hello", "World!")

你可能已经料到,这时终端上会显示"Hello World!"。请注意,与内置的"打印"功能不同,Rich 会将文字自动换行以适合终端宽度。

有几种方法可以为输出添加颜色和样式。可以通过添加style关键字参数来为整个输出设置样式。例子如下:console.print("Hello", "World!", style="bold red")

输出如下图:

386c8209e6e34ddea1aefe549643c448.png

这个范例一次只设置了一行文字的样式。如果想获得更细腻更复杂的样式,Rich 可以渲染一个特殊的标记,其语法类似于bbcode。示例如下:console.print("Where there is a [bold cyan]Will[/bold cyan] there [u]is[/u] a [i]way[/i].")503cfc796fd65672e3b31c227f7dac22.png

控制台记录

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 = ["Deadpool", "Rise of the Skywalker"]

console.log("Hello from", console, "!")

console.log(test_data, log_locals=True)

test_log()

以上范例的输出如下:

ddda762bf0c57556e92820cd76df5129.png注意其中的log_locals参数会输出一个表格,该表格包含调用 log 方法的局部变量。

log 方法既可用于将长时间运行应用程序(例如服务器)的日志记录到终端,也可用于辅助调试。

回溯

Rich 可以渲染漂亮的回溯,比标准 Python 回溯更容易阅读,并能显示更多代码。你可以将 Rich 设置为默认的回溯处理程序,这样所有难以捕获的异常都将由 Rich 为您呈现。

下面是在 OSX(与 Linux 类似)上的外观:

3b9716400700278d07b5f1447d3ad6b3.png

表格

Rich 可以使用 Unicode 框字符来呈现多变的表格。Rich 包含多种边框,样式,单元格对齐等格式设置的选项。下面是一个简单的示例: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(

"Dev 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)b5796fa91e0014f8aab922d192795b05.png

如上所述,该表将适合终端窗口的当前宽度,以确保表完美显示。

31f175a75a9ba6510dbaaf1e827dc504.png

丰富的进度条

Rich 库还提供令人惊叹的进度条功能。使用也非常简单。from rich.progress import track

from time import sleep

for step in track(range(100), description="Writing Medium Story..."):

    sleep(0.1)ee49ec0b806dd02ed704cff50d2f0a61.png

添加多个进度条并不难。

f0ca39d983c072ce4eec7b2dd7c7e42b.gif

这些列可以配置为显示你所需的任何详细信息。内置列包括完成百分比,文件大小,文件速度和剩余时间。下面是显示正在进行的下载的示例:

8abc602346dd55f266c5af9a11c75db2.gif

Markdown

Rich 可以呈现 markdown,并可相当不错的将其格式转移到终端。

为了渲染 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)

该例子的输出如下图:

25edcf28d35f3dae9f0fc2c0c7990254.png

Rich 可以将内容通过排列整齐的,具有相等或最佳的宽度的列来呈现。下面是(macOS / Linux)ls命令的一个非常基本的克隆,用于用列来显示目录列表:import os

from rich import print

from rich.columns import Columns

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

print(Columns(directory))

以下屏幕截图是列示例的输出,该列显示了从 API 提取的数据:

3d326634dceba6d72de1c7b68c92f3be.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值