Python Rich:美化终端显示效果

这篇具有很好参考价值的文章主要介绍了Python Rich:美化终端显示效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Rich库的功能就像它的名字一样,使Python编程更加丰富(rich),
它帮助开发者在控制台(命令行)输出中创建丰富、多彩和具有格式化的文本。

本篇总结了如何使用Rich库让我们的命令行工具更加美观。

1. 安装

通过pip安装:

pip install rich

使用下面的命令验证是否安装成功。

python -m rich

2. 应用示例

Rich的功能很多,下面通过代码示例来演示其中主要的功能。

2.1. 美化 REPL 输出

安装python之后,在命令行输入python,就可以进入python的交互式命令行环境(REPL)。
因为python是解释性语言,所以可以在REPL环境中交互式的运行代码:
Python Rich:美化终端显示效果
注:REPL全称: Read-Eval-Print-Loop (交互式解释器)

默认的REPL是没有颜色的,使用Rich可以美化REPL的显示,获得更好的交互效果。
只需要导入Rich库的pretty即可。

>>> from rich import pretty
>>> pretty.install()

再次运行上面的代码:
Python Rich:美化终端显示效果
不同的数据类型会用不同的颜色来表示。

2.2. 查看对象信息

Rich库中还提供了一个还有用的功能,用来查看python中各个变量或对象的详细信息。
使用前导入 inspect 函数。

>>> from rich import inspect

对于变量,查看其概括信息的方式如下:

>>> inspect(lst_var)

Python Rich:美化终端显示效果

查看其包含的方法:

>>> inspect(lst_var, methods=True)

Python Rich:美化终端显示效果

对于对象,也是一样:

# -*- coding: utf-8 -*-
from rich import inspect

class Sample:
    def __init__(self, name, age):
        self._name = name
        self._age = age

    def info(self):
        print("姓名: {}, 年龄: {}".format(self.name, self.age))

    def set(self, name, age):
        self.name = name
        self.age = age

    def get(self):
        return {"name": self.name, "age": self.age}

    # 私有函数
    def _private(self):
        print("这是私有函数")

if __name__ == "__main__":
    sa = Sample("harry", 33)

    # 显示对象概要信息
    inspect(sa)

    # 显示对象方法信息
    inspect(sa, methods=True)

    # 显示对象方法和私有变量,私有函数
    inspect(sa, methods=True, private=True)

Python Rich:美化终端显示效果
Rich库的inspect函数让我们在命令行中也可以获得非常好的阅读体验。

2.3. 动态显示内容

动态显示在命令行中一直是个难点,而Rich库能帮助我们很容易的实现状态和进度的动态显示。

比如,如果有多个任务在执行,可以用Rich来动态显示执行的情况。

# -*- coding: utf-8 -*-

from time import sleep
from rich.console import Console

console = Console()
count = 5
tasks = [f"task {n}" for n in range(1, count + 1)]


with console.status("") as status:
    num = 1
    while tasks:
        status.update("[{}/{}] 已经完成".format(num, count))
        task = tasks.pop(0)
        sleep(1)
        num += 1

print("所有任务 全部完成!")

Python Rich:美化终端显示效果
这样就不用打印出很多行的日志信息,而是动态的显示task完成的情况。

还有一个动态的应用是进度条,进度条虽然不能提高程序的性能,
但是它让我们了解到程序大概运行到哪了,能够减少等待的焦虑。

比如,传输大量文件或者下载大文件的过程中,没有进度条的话,常常会担心程序是不是卡住了。
下面是一个模拟文件传输中使用进度条的示例:

# -*- coding: utf-8 -*-

import time

from rich.progress import Progress

# 模拟2个文件,一个是文件名,一个是文件大小
files = [("windows.iso", 24000), ("debian.iso", 17000)]

with Progress() as progress:
    tasks = []
    for f in files:
        task_id = progress.add_task("copy {}".format(f[0]), filename=f[0], start=False)
        progress.update(task_id, total=f[1])

        progress.start_task(task_id)
        # 模拟读取文件,每次读取1024字节
        total = f[1]
        buffer = 1024
        while total > 0:
            read_bytes = 0
            if total > buffer:
                read_bytes = buffer
                total -= buffer
            else:
                read_bytes = total
                total = 0

            progress.update(task_id, advance=read_bytes)
            time.sleep(0.2)

        progress.console.log("{} 传输完成!".format(f[0]))
        progress.stop_task(task_id)

Python Rich:美化终端显示效果

2.4. 复杂结构显示

Rich库还可以帮助我们在控制台显示一些结构化的内容。

2.4.1. 表格

表格是最常用的一种表现形式,也是最常用的一种展示数据的方式。

# -*- coding: utf-8 -*-

from rich.console import Console
from rich.table import Table

table = Table(title="国内生产总值指数")

table.add_column("年份", justify="left", style="cyan", no_wrap=True)
table.add_column("指标", style="magenta")
table.add_column("数值", justify="right", style="green")

table.add_row("2022年", "国民总收入指数", "4432.1")
table.add_row("2021年", "国民总收入指数", "4319.7")
table.add_row("2020年", "国民总收入指数", "3979.1")
table.add_row("2019年", "国民总收入指数", "3912.1")

console = Console()
console.print(table)

Python Rich:美化终端显示效果

2.4.2. 树形

树形结构也是常用的结构,比如展示文件夹结构:

# -*- coding: utf-8 -*-

from rich.tree import Tree
from rich import print

# 根节点
tree = Tree("/")

# usr 分支
usr = tree.add("usr")
fonts = usr.add("fonts")
bin = usr.add("bin")
lib = usr.add("lib")

# home 分支
home = tree.add("home")
git = home.add("git")
python = home.add("python")
golang = home.add("golang")

# projects 分支
projects = home.add("projects")
samples = projects.add("samples")
work = projects.add("work")

print(tree)

Python Rich:美化终端显示效果

2.5. 文档和代码显示

IT行业内,markdown文档代码几乎是绕不开的2个东西。

然而,直接在命令行中原样显示的markdown代码的话,是很难阅读的。
利用Rich库,可以帮助我们解析markdown的标记,高亮不同编程语言的代码,从而在命令行中获得良好的阅读体验。

# -*- coding: utf-8 -*-

from rich.console import Console
from rich.markdown import Markdown


md_sample = """这是一份[Markdown][1]的语法介绍。

# 段落

一个段落是由一个或多个连续的行构成,段落间靠一个或以上视觉上的空行划分。

    这是一个段落。它有两个句子。

    这是另一个段落。它也有
    两个句子。


## 代码

`print("hello")`

### 列表

* 无序(没有编号的)列表中的一项
    * 一个子项,要以一个制表符或者4个空格缩进
* 无序列表中的另一个项
1. 有序(排好序,有编号的)列表中的一项
1. 有序列表中的另一个项


[1]: http://daringfireball.net/projects/markdown/
"""

console = Console()
markdown = Markdown(md_sample)
console.print(markdown)

Python Rich:美化终端显示效果
可以看出,不同的markdown标记会解析成不同的显示效果。

同样,对于不同的代码,也可以高亮显示:

# -*- coding: utf-8 -*-

from rich.console import Console
from rich.syntax import Syntax

py_code = """
def hello(name):
    print("hello ", name)

hello("world")
"""

java_code = """
public class HelloWorld
{
    public static void main(String[] args)
    {
        System.out.println("Hello,World!");
    }
}
"""

c_code = """
#include <stdio.h>
int main()
{
    printf("Hello,World!");
    return 1;
}
"""

console = Console()

console.print("========================")
console.print("[green]python 代码")
console.print("========================")
syntax = Syntax(py_code, "python", theme="monokai", line_numbers=True)
console.print(syntax)

console.print("========================")
console.print("[blue]java 代码")
console.print("========================")
syntax = Syntax(java_code, "java", theme="monokai", line_numbers=True)
console.print(syntax)

console.print("========================")
console.print("[red]c 代码")
console.print("========================")
syntax = Syntax(c_code, "c", theme="monokai", line_numbers=True)
console.print(syntax)

Python Rich:美化终端显示效果
这里只演示了3种代码,但是Rich可以支持几乎所有主流的代码。

3. 总结

总的来说,Python Rich库是一个强大的工具,可以让Python开发者在命令行环境中拥有更加丰富和强大的输出能力,使得数据呈现更加直观,增强了代码的可读性和调试效率。

本篇演示了一些常用的功能,关于Rich库的其他功能和每个功能的细节可以参考其官方文档:
https://rich.readthedocs.io/en/latest/文章来源地址https://www.toymoban.com/news/detail-825110.html

到了这里,关于Python Rich:美化终端显示效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 终端美化方案 FluentTerminal + oh-my-posh

    研究了很久的 windows 平台的终端方案,最终得出了 FluentTerminal 配合 oh-my-posh 的一套终端方案。 一款美观的终端工具,个人感觉比 Windows Terminal 更加美观。 下载方式: 直接去微软自带的应用商店里面去搜索下载。 前往FluentTerminal 项目地址进行下载 设置鼠标右键打开: 新建个

    2024年02月05日
    浏览(40)
  • 【微信小程序】富文本rich-text的图片预览效果的几种方法

    使用原生小程序开发,实现在富文本rich-text中的图片预览效果的几种方法对比。 update:因为方案3wxparser后续没有再维护,解析微信公众号文章时会出现排版错误的问题。作为插件也很难二次开发。换成 mp-html 了 一个不需要用额外组件或插件的方法: 思路 :使用正则把图片的

    2023年04月08日
    浏览(55)
  • todesk连接ubuntu显示当前系统并无桌面环境,或无显示器,无法显示远程桌面,您需要自行安装X11桌面环境,或者使用终端文件功能

      ToDesk远程遇到的问题如上图,换向日葵直接黑屏; 问题原因 截止发文时间,Todesk只支持X11协议,没有适配最新的Wayland协议,所以我们需要把窗口系统调整为X11才可以。 解决方法 修改配置文件,关闭wayland sudo vim /etc/gdm3/custom.conf 1.把#WaylandEnable=false前的#号删掉 重启 reboot

    2024年02月04日
    浏览(62)
  • python 安装成功后终端显示的还是低版本

    如果你下载了新版的 Python,但在使用时发现仍然是之前的版本,可能是因为新版的 Python 没有替代系统环境中的旧版 Python。 检查 PATH 环境变量:在命令行中输入 python --version 来查看当前默认的 Python 版本。如果显示的是旧版 Python 的版本,说明系统环境变量中指向旧版 Pyt

    2024年01月15日
    浏览(40)
  • 微信小程序 rich-text 超过 2 行显示省略号

    rich-text(富文本),如果想实现文本超过两行变成省略号,常规的 div 可以实现,但因为是在微信小程序中,同时使用的是 rich-text 返回的是富文本,所以不能简单的使用以下代码实现: 因为富文本使用的 rich-text 回显的,想着直接对这个标签写上这个 CSS,发现也无法达到想

    2024年02月03日
    浏览(40)
  • vue 数组转换成dataframe,在终端像python一样行列显示

    1 npm安装 2 导入 3 src目录下创建文件 pandas-js.d.ts 4 使用

    2024年02月13日
    浏览(39)
  • Macbook pro 14(m1 pro)安装终端 iterm2 &简单美化 2022最新版本

    本篇文章记录如何安装并且美化 macOS 的 Terminal 环境 ,让平常工作起來更高效。 本篇文章会安装 软件: homebrew item2 oh-my-zsh 插件: zsh-autosuggestions zsh-syntax-highlighting 写在前面:所有命令都在终端app里执行即可 Homebrew 是一款在 macOS 上主流的套件管理工具,打开 Terminal 输入以下

    2024年02月01日
    浏览(69)
  • Vue3+ElementUI 多选框中复选框和名字点击方法效果分离

    现在的需求为 比如我点击了Option A ,触发点击Option A的方法,并且复选框不会取消勾选,分离的方法。   通过Vue事件处理的方法.prevent来阻止。!-- 提交事件将不再重新加载页面 --

    2024年01月22日
    浏览(59)
  • Mac和Linux的Terminal终端美化,命令高亮、自动补全、超多内置插件等着你来探索

    如果你经常和Terminal打交道,那么这个开源的项目一定很适合你 官网地址:https://ohmyz.sh/ 安装 Oh My Zsh是Zsh的框架,所以看下是否安装了zsh。 如果没有安装zsh,需要根据对应系统根据命令安装配置 官网安装参考地址: https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH 安装完zsh后就可

    2024年02月07日
    浏览(46)
  • python基于pygame库实现弹幕效果(多行显示,速度不同,颜色不同,循环显示)

            使用python实现类似弹幕的显示效果,弹幕文本存储在txt文件中,弹幕多行显示,弹幕颜色不同有区别,弹幕的速度不一,弹幕要循环显示。      弹幕文本数据:danmu.txt

    2024年02月08日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包