大家好,我是才哥。

最近后知后觉看到一个花里花哨rich库,可以让你的控制台输出结果美妙绝伦!!

如果你也还不知道这库的存在,倒是可以一看究竟,没准也会喜欢上她!

Rich 是一个 Python 库,可以为您在终端中提供富文本和精美格式。

Rich API可以很容易的在终端输出添加各种颜色和不同风格。Rich 还可以绘制漂亮的表格,进度条,markdown,突出显示语法的源代码及回溯等等,不胜枚举。

Rich 适用于 Linux,OSX 和 Windows。真彩色/表情符号可与新的 Windows 终端一起使用,Windows 的经典终端仅限 8 种颜色。

Rich 还可以与Jupyter 笔记本一起使用,而无需其他配置。

文章目录

  • 1. 准备工作
  • 2. Rich的功能特色
  • 3. 功能演示
    • 3.1. 颜色与样式
    • 3.2. 文本格式
    • 3.3. 文本高亮
    • 3.4. 输入提示
    • 3.5. 表情符号
    • 3.6. 表格
    • 3.7. 语法高亮
    • 3.8. markdown格式输出
    • 3.9. 进度条
    • 3.10. 树结构
    • + More

本文演示环境:

JupyterLab = 3.0.11,主题为暗色

1. 准备工作

安装rich

pip install rich

简单的例子

from rich import printprint("[italic red]Hello[/italic red] World!")

我们可以看到,上面例子中输出的Hello World中Hello被设置为红色斜体,World为默认值。

再看一个例子

from rich.panel import PanelPanel.fit("[bold yellow]Hi, I'm a Panel", border_style="red")

这个例子,我们采用了Panel(面板),面板的轮廓为红色,内容文案为加粗的黄色。

以上只是简单介绍两个小例子,接下来我们来看看Rich是如何rich各种精美的输出吧!

2. Rich的功能特色

在jupyterlab里运行(截图是在jupyterlab暗黑主题下截取)

%run -m rich

在cmd终端里运行

python -m rich

可以得到下面这个展示rich库功能特色的简要说明,我们能清晰的看出它所具备的及支持的精美格式诸如:

  • 颜色
  • 样式
  • 文本对齐方式
  • 多语言支持
  • 标记符号&表情
  • 表格
  • 语法高亮
  • markdown
  • 进度条
  • …+more

3. 功能演示

我们这里只做简单的功能案例演示,详细的使用大家可以直接查看官方文档。

https://rich.readthedocs.io/en/stable/

3.1. 颜色与样式

我们先构造一个控制台对象,然这个对象有一个print方法,和python内置的功能基本一致。和内置的不同在于Rich会将文字自动换行以适合终端宽度,并且有几种方法可以为输出添加颜色和样式。

from rich.console import Consoleconsole = Console()
console.print("Hello", style="magenta")

可以看到,输出的Hello是酒红色的,颜色通过style参数设置,这里颜色是英文单词,同时也可以是16进制颜色码、RGB或者颜色color(n)表示等等。

console.print("Rich库有点意思啊", style="red on white")

上面这个例子,我们发现还可以通过style设置文本颜色及底色。

另外,我们还可以这样设置文本样式:通过[red][/red]来设置其框定的区域文本颜色与样式。

from rich import printprint("[bold red]alert![/bold red] Something happened")

3.2. 文本格式

Rich有个Text类,用于我们对长文本进行颜色与样式调整。

from rich.console import Console
from rich.text import Textconsole = Console()
text = Text("0123456789")
text.stylize("bold magenta", 0, 6)
console.print(text)

对于上面这个案例,将字符串0123456789[0,6)下标的字符颜色设置为酒红色粗体。

from rich import print
from rich.panel import Panel
from rich.text import Textpanel = Panel(Text("大家好,我是才哥。欢迎关注微信公众号:可以叫我才哥!", justify="center"))
print(panel)

这个例子中,我们可以看到它是将文本居中对齐在一个面板中。

3.3. 文本高亮

Rich可以通过正则或者其他形式让文本中指定的字符高亮。

比如,我们通过正则让文本中邮箱字符高亮:

from rich.console import Console
from rich.highlighter import RegexHighlighter
from rich.theme import Themeclass EmailHighlighter(RegexHighlighter):"""Apply style to anything that looks like an email."""base_style = "example."highlights = [r"(?P<email>[\w-]+@([\w-]+\.)+[\w-]+)"]theme = Theme({"example.email": "bold magenta"})
console = Console(highlighter=EmailHighlighter(), theme=theme)
console.print("Send funds to money@example.org")

比如,我们可以将文本每个字符设置成随机的颜色:

from random import randintfrom rich import print
from rich.highlighter import Highlighterclass 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("大家好,我是才哥,是不是每个字的颜色都不一样?"))

3.4. 输入提示

Rich有个Prompt类,用于提示我们进行输入(类似input功能),不过它还支持指定值输入及选择判断等。

提示输入:

from rich.prompt import Promptname = Prompt.ask("Enter your name")

指定值输入:

from rich.prompt import Promptname = Prompt.ask("Enter your name", choices=["才哥", "可以叫我才哥", "天才"], default="可以叫我才哥")

选择判断:

from rich.prompt import Confirmis_rich_great = Confirm.ask("Do you like rich?")assert is_rich_great

3.5. 表情符号

将名称放在两个冒号之间即可在控制台输出中插入表情符号。

from rich.console import Consoleconsole = Console()
console.print(":smiley: :pile_of_poo: :thumbs_up: ")

3.6. 表格

Rich 可以使用 Unicode 框字符来呈现多变的表格,它包含多种边框,样式,单元格对齐等格式设置的选项。

from rich.console import Console
from rich.table import Tabletable = Table(title="Star Wars Movies")table.add_column("Released", justify="right", 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()
console.print(table)

3.7. 语法高亮

Rich 使用pygments库来实现语法高亮显示

from rich.console import Console
from rich.syntax import Syntaxmy_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:returnfirst = Truefor value in iter_values:yield first, False, previous_valuefirst = Falseprevious_value = valueyield first, True, previous_value
'''
syntax = Syntax(my_code, "python", theme="monokai", line_numbers=True)
console = Console()
console.print(syntax)

3.8. markdown格式输出

Rich 可以呈现markdown,并可相当不错的将其格式转移到终端。为了渲染 markdown,导入Markdown类,并使用包含 markdown 代码的字符串来构造它,然后将其打印到控制台。

MARKDOWN = """
# 这是一级标题Rich 库能比较**完美**的输出markdown.1. This is a list item
2. This is another list item```python
from rich.console import Console
from rich.markdown import Markdownconsole = Console()
md = Markdown(MARKDOWN)
console.print(md)
```
![二维码](https://gitee.com/dxawdc/pic/raw/master/image/qrcode_for_gh_ce68560ed124_258.jpg)
"""
from rich.console import Console
from rich.markdown import Markdownconsole = Console()
md = Markdown(MARKDOWN)
console.print(md)

3.9. 进度条

Rich 可以渲染多个不闪烁的进度条形图,以跟踪长时间运行的任务。基本用法:用track函数调用任何程序并迭代结果。

from rich.progress import track
import timefor step in track(range(100)):time.sleep(0.1)

3.10. 树结构

Rich有个Tree类,用于展示树结构。

from rich.tree import Tree
from rich import printtree = Tree("地球")
baz_tree = tree.add("亚洲")
baz_tree.add("[red]中国").add("[green]北京").add("[yellow]海淀区")
print(tree)

+ More

Padding填充:

from rich import print
from rich.padding import Paddingtest = Padding("Hello", (2, 4), style="on blue", expand=False)
print(test)

Panel面板:

from rich import print
from rich.panel import Panelprint(Panel("Hello, [red]World!", title="Welcome"))

layout布局:

from rich import print
from rich.layout import Layoutlayout = Layout()
layout.split_column(Layout(name="upper",size = 10),Layout(name="lower",size = 10)
)layout["lower"].split_row(Layout(name="left"), Layout(name="right"),)
layout["right"].split(Layout(Panel("Hello")),Layout(Panel("World!"))
)
print(layout)

Live动态:

import timefrom rich.live import Live
from rich.table import Tabletable = Table()
table.add_column("Row ID")
table.add_column("Description")
table.add_column("Level")with Live(table, refresh_per_second=4):  # update 4 times a second to feel fluidfor row in range(12):time.sleep(0.4)  # arbitrary delay# update the renderable internallytable.add_row(f"{row}", f"description {row}", "[red]ERROR")

Python输出还可以这么花里胡哨,这个第三方rich库值得你了解一下相关推荐

  1. python输出字母金字塔a bb ccc dddd_c#题库(程序设计基础)-New

    <程序设计基础>题库 (47 道 ) < 说明 > 难易程度依次为:易( 4 道) . 较易( 15 道) . 较难( 12 道) . 难( 9 道) . 很难( 7 道) 其 ...

  2. python输出数学表达式_python计算数学表达式

    python处理长串字符串数学计算没有生来就坚强的人,只有笑着说没关系的傻瓜. python处理长串字符串数学计算比如拿到一串字符串"1+2*3/4-8"有什么支持使用eval函数 ...

  3. python导入excel类库_Python中使用第三方库xlutils来追加写入Excel文件示例

    Python中使用第三方库xlutils来追加写入Excel文件示例 目前还没有更好的方法来追写Excel,lorinnn在网上搜索到以及之后用到的方法就是使用第三方库xlutils来实现了这个功能, ...

  4. python输出文本居中_#python PIL ImageDraw text 文本居中#

    python pip pil有什么东西 你所问的问题实是属1.先参考[教程]Python中的内置的和方的模块搞懂PIL是属于第三方Python模块2.再参考:[待完善][总结]Python安装第三方的 ...

  5. python中用来绘制词云的第三方库_如何用Python绘制词云?

    如果希望能够看懂代码,那么需要具备: 1. 了解Python语言的语法结构 2. 了解Python语言的标准包.第三方包的区别 3. Python代码基本是英文,意思一定程度上代表了它要做的事,懂英文 ...

  6. python输出个人信息_Python如何输出警告信息

    问题 你希望自己的程序能生成警告信息(比如废弃特性或使用问题). 解决方案 要输出一个警告消息,可使用 warning.warn()函数.例如: import warnings def func(x, ...

  7. python如何封装成可调用的库_在python中如何以异步的方式调用第三方库提供的同步API...

    在关于asyncio的基本用法中提到,asyncio并不是多线程.在协程中调用同步(阻塞函数),都占用同一线程的CPU时间,即当前线程会被阻塞(即协程只会在等待一个协程时可能出让CPU,如果是普通函数 ...

  8. python输出表达式值_python 输出表达式之format

    principal = 1000rate= 0.05numyears= 5year= 1 while year <=numyears: principal= principal * ( 1 +r ...

  9. python安装第三方库win10_在win里anaconda怎么安装第三方的库

    这次给大家带来在win里anaconda怎么安装第三方的库,在win里anaconda安装第三方库的注意事项有哪些,下面就是实战案例,一起来看一下. anaconda 集成了很多科学计算中所需要的包, ...

最新文章

  1. 中石油计算机职称考试题,2019年职称英语考试中石油历年真题及答案
  2. 计算机视觉:图像检测和图像分割有什么区别?
  3. 【MM模块】Sub Range 供应商子范围
  4. mysql主从从配置详解_MySQL主从配置详解
  5. 透明地持久保存并从数据库中检索加密的数据
  6. lodash 常用的方法总结(持续更新)
  7. ubuntu python3.7修改默认pip版本_详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本 安装python3后使用pip和pip3的区别...
  8. 基于机器视觉的Data Matrix二维码识别
  9. 简单区分NMOS和PMOS的方法
  10. 微信小程序商城模板平台分享
  11. js报错未定义的ajax,ReactJS和AJAX未捕获TypeError:无法读取未定义的属性'错误'
  12. 使用ping检测MTU值
  13. 《操作系统学习总结》
  14. windows 多用户使用谷歌浏览器
  15. linux安全配置技术论文,基于linux平台的web安全技术研究apache安全大学论文.doc
  16. 学习 Lisp 语言的相关书籍
  17. oracle怎么对账,Oracle EBS 如何月结、对账[Z]
  18. 批量修改linux服务器密码,Linux下批量修改服务器用户密码方法步骤
  19. 《精力管理》读书笔记
  20. SPSS Modeler与Google地图的完美结合

热门文章

  1. 解决SSH连接不上的问题
  2. 【电源设计】12电源芯片详细选型攻略
  3. android 使用百度全景sdk出现的问题
  4. Linux终端光标变成黑块,[转载]解决Ubuntu下搜狗输入法的黑块儿问题
  5. 产品经理培训行业---以起点学院为主体的相关竞品分析报告
  6. 腾讯起点学院:用户增长训练营
  7. 创新谈-数据库概念设计之几点见解-吴雨光
  8. linux 触摸屏驱动分析
  9. BAPI_PO_CREATE1 净价net_price 无效
  10. Java年薪30W+面试必问知识之《2020年面试宝典总纲》