최근에 flowerliHu휘파람을 봤어요 의 rich
라이브러리를 사용하면 콘솔 출력이 환상적입니다. ! !
이 도서관의 존재를 모른다면 한 번 살펴보면 아마도 그녀와 사랑에 빠지게 될 것입니다!
Rich는 터미널에서 풍부한 텍스트와 아름다운 서식을 제공하는 Python 라이브러리입니다.
풍부한 API를 사용하면 터미널 출력에 다양한 색상과 스타일을 쉽게 추가할 수 있습니다. Rich는 또한 아름다운 테이블, 진행률 표시줄, 마크다운, 구문 강조 및 역추적 기능이 있는 소스 코드 등을 그릴 수 있습니다.
Linux, OSX 및 Windows에서 풍부한 기능을 사용할 수 있습니다. 트루 컬러/이모지는 새로운 Windows 터미널에서 작동하며, Windows의 클래식 터미널은 8가지 색상으로 제한됩니다.
Rich는 추가 구성 없이 Jupyter 노트북에서도 사용할 수 있습니다.
디렉토리:
1. 준비
2.
3. 기능 시연
3.1. 색상 및 스타일
3.2. 텍스트 강조 표시.
3.4.
3.5. 이모티콘
3.6. 테이블
3.7. 8. 마크다운 형식 출력
3.9 진행률 표시줄
3.10. 트리 구조
+ 더보기
이 기사의 데모 환경:
JupyterLab = 3.0.11
, 테마는 어둡습니다
풍부한
라이브러리pip install rich
from rich import print print("[italic red]Hello[/italic red] World!")
위 예의 JupyterLab = 3.0.11
,主题为暗色
安装rich
가 빨간색 기울임꼴로 설정되어 있고 World가 기본값임을 알 수 있습니다. 다른 예를 보세요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")
위 내용은 Python 출력은 매우 멋질 수 있습니다. 이 타사 라이브러리는 알아둘 가치가 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!