Recently I saw a 花##. #里Huwhistle的 rich library can make your console output results wonderful! !
If you don’t know the existence of this library, you can take a look and maybe you will fall in love with her!
Rich is a Python library that gives you rich text and beautiful formatting in your terminal. Rich API makes it easy to add various colors and styles to the terminal output. Rich can also draw beautiful tables, progress bars, markdown, source code with syntax highlighting and tracebacks, and the list goes on. Rich available for Linux, OSX and Windows. True Colors/Emojis work with the new Windows Terminal, Windows' classic Terminal is limited to 8 colors. Rich can also be used with Jupyter notebooks without additional configuration.
Contents:
1. Preparation
2. Features of Rich
3. Function demonstration
##3.1. Color and style
3.2. Text format
3.3. Text highlighting
3.4. Input prompt
3.5. Emoticon
3.6 . Table
3.7. Syntax highlighting
3.8. Markdown format output
3.9. Progress bar
JupyterLab = 3.0.11
, the theme is dark
Library<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">pip install rich</pre><div class="contentsignin">Copy after login</div></div>
Simple example
from rich import print print("[italic red]Hello[/italic red] World!")
Hello# output in the above example #Hello in World is set to red italic, and World is the default value. Look at another example
from rich.panel import Panel Panel.fit("[bold yellow]Hi, I'm a Panel", border_style="red")
以上只是简单介绍两个小例子,接下来我们来看看Rich是如何rich各种精美的输出吧!
在jupyterlab里运行(截图是在jupyterlab暗黑主题下截取)
%run -m rich
在cmd终端里运行
python -m rich
可以得到下面这个展示rich库功能特色的简要说明,我们能清晰的看出它所具备的及支持的精美格式诸如:
我们这里只做简单的功能案例演示,详细的使用大家可以直接查看官方文档。
https://rich.readthedocs.io/en/stable/
我们先构造一个控制台对象,然这个对象有一个print方法,和python内置的功能基本一致。和内置的不同在于Rich会将文字自动换行以适合终端宽度,并且有几种方法可以为输出添加颜色和样式。
from rich.console import Console console = 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 print print("[bold red]alert![/bold red] Something happened")
Rich有个Text类,用于我们对长文本进行颜色与样式调整。
from rich.console import Console from rich.text import Text console = 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 Text panel = Panel(Text("大家好,我是才哥。欢迎关注微信公众号:可以叫我才哥!", justify="center")) print(panel)
这个例子中,我们可以看到它是将文本居中对齐在一个面板中。
Rich可以通过正则或者其他形式让文本中指定的字符高亮。
比如,我们通过正则让文本中邮箱字符高亮:
from rich.console import Console from rich.highlighter import RegexHighlighter from rich.theme import Theme class 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 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("大家好,我是才哥,是不是每个字的颜色都不一样?"))
Rich有个Prompt类,用于提示我们进行输入(类似input功能),不过它还支持指定值输入及选择判断等。
提示输入:
from rich.prompt import Prompt name = Prompt.ask("Enter your name")
指定值输入:
from rich.prompt import Prompt name = Prompt.ask("Enter your name", choices=["才哥", "可以叫我才哥", "天才"], default="可以叫我才哥")
选择判断:
from rich.prompt import Confirm is_rich_great = Confirm.ask("Do you like rich?") assert is_rich_great
将名称放在两个冒号之间即可在控制台输出中插入表情符号。
from rich.console import Console console = Console() console.print(":smiley: :pile_of_poo: :thumbs_up: ")
Rich 可以使用 Unicode 框字符来呈现多变的表格,它包含多种边框,样式,单元格对齐等格式设置的选项。
from rich.console import Console from rich.table import Table table = 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)
Rich 使用pygments库来实现语法高亮显示
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)
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 Markdown console = 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 Markdown console = Console() md = Markdown(MARKDOWN) console.print(md)
Rich 可以渲染多个不闪烁的进度条形图,以跟踪长时间运行的任务。基本用法:用track
函数调用任何程序并迭代结果。
from rich.progress import track import time for step in track(range(100)): time.sleep(0.1)
Rich有个Tree类,用于展示树结构。
from rich.tree import Tree from rich import print tree = Tree("地球") baz_tree = tree.add("亚洲") baz_tree.add("[red]中国").add("[green]北京").add("[yellow]海淀区") print(tree)
Padding
填充:
from rich import print from rich.padding import Padding test = Padding("Hello", (2, 4), style="on blue", expand=False) print(test)
Panel
面板:
from rich import print from rich.panel import Panel print(Panel("Hello, [red]World!", title="Welcome"))
layout
布局:
from rich import print from rich.layout import Layout layout = 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 time from rich.live import Live from rich.table import Table table = 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 fluid for row in range(12): time.sleep(0.4) # arbitrary delay # update the renderable internally table.add_row(f"{row}", f"description {row}", "[red]ERROR")
The above is the detailed content of Python output can be so fancy. This third-party library is worth knowing about.. For more information, please follow other related articles on the PHP Chinese website!