Как использовать библиотеку Rich с Python
В этой статье мы узнаем о мощной библиотеке для Python под названием Rich.
Rich — это библиотека Python для записи форматированного текста (с цветом и стилем) на терминал. Она позволяет отображать расширенный контент, такой как таблицы, markdown и код с подсветкой синтаксиса.
Итак, почему это полезно? Если вы не используете такой инструмент, как Rich, вывод вашего кода на терминал может быть немного скучным и трудным для понимания. Если вы хотите сделать его понятнее и красивее, вы, вероятно, захотите использовать Rich — и вы попали в нужное место, чтобы узнать, как это сделать.
Как установить Rich
Вы можете установить Rich с помощью pip:
pip install Rich
Чтобы узнать, на что способен Rich, вы можете набрать в терминале следующую команду:
python -m rich
Теперь вы можете видеть, что мы можем делать довольно много вещей с Rich. Давайте попробуем несколько из них, чтобы увидеть, как они работают.
Как вывести Rich на Python
Rich имеет возможность выделять выходные данные в соответствии с типом данных. Мы импортируем альтернативную функцию print
из библиотеки Rich, которая принимает те же аргументы, что и встроенная функция print
.
Чтобы не путаться со встроенной функцией print
, мы будем импортировать print
из библиотеки rich
как rprint
.
from rich import print as rprint
nums_list = [1, 2, 3, 4]
rprint(nums_list)
nums_tuple = (1, 2, 3, 4)
rprint(nums_tuple)
nums_dict = {'nums_list': nums_list, 'nums_tuple': nums_tuple}
rprint(nums_dict)
bool_list = [True, False]
rprint(bool_list)
Вывод:
Видите, как разные типы данных выделяются разными цветами? Это может нам сильно помочь при отладке.
Как выполнить расширенную проверку в Python
Если вы используете встроенную функцию help
для просмотра документации библиотеки, вы увидите скучный вывод.
import rich
print(help(rich))
Вывод:
У Rich есть функция inspect()
, которая может генерировать отчет о любом объекте Python. Это фантастическое средство отладки и хороший пример вывода, который может создать Rich.
from rich import inspect
import rich
inspect(rich)
Вывод:
Как оформить вашу консоль с помощью Rich
Для полного контроля над форматированием терминала Rich предлагает класс Console
.
Давайте напишем функцию для объединения словарей Python.
from rich.console import Console
console = Console()
def merge_dict(dict_one, dict_two):
merged_dict = dict_one | dict_two
console.log(merged_dict, log_locals=True)
merge_dict({'id': 1}, {'name': 'Ashutosh'})
Вывод:
В приведенном выше примере мы использовали метод log
, который предлагает те же возможности, что и печать, но добавляет некоторые функции, полезные для отладки работающего приложения.
Есть несколько других методов, таких как print
, print_json
, out
, rule
, и так далее. Узнайте больше о них здесь.
Как использовать Tree в Rich
У Rich есть класс Tree
, который может генерировать древовидное представление в терминале. Древовидное представление — отличный способ представления содержимого файловой системы или любых других иерархических данных. Каждая ветвь дерева может иметь метку, которая может быть текстовой или любой другой визуализируемой Rich.
Давайте посмотрим на пример, создав генеалогическое древо:
from rich.tree import Tree
from rich import print as rprint
tree = Tree("Family Tree")
tree.add("Mom")
tree.add("Dad")
tree.add("Brother").add("Wife")
tree.add("[red]Sister").add("[green]Husband").add("[blue]Son")
rprint(tree)
Вывод:
Создав экземпляр класса Tree
, мы можем использовать этот метод add()
для добавления к нему ветвей. Чтобы создать сложное дерево, вы просто используете метод add()
для добавления к нему дополнительных ветвей. Обратите внимание на ветвь « Brother and Sister » в приведенном выше примере.
В официальной документации у нас есть файл tree.py, который выводит файловую структуру с помощью Tree. Вывод выглядит следующим образом:
Как отобразить индикатор выполнения с помощью Rich
Rich может отображать постоянно обновляемую информацию о состоянии длительно выполняемых задач, копиях файлов и т. д. Вы также можете настроить эту информацию. По умолчанию он предоставляет описание «задачи», индикатор выполнения, процент выполнения и ожидаемое оставшееся время.
Поддерживается несколько задач с богатым отображением хода выполнения, каждое из которых имеет полосу и статистику выполнения. Вы можете использовать это, чтобы отслеживать несколько заданий, которые выполняются в потоках или процессах.
Давайте сначала попробуем метод создания индикатора выполнения progress.track
.
from rich.progress import track
from time import sleep
def process_data():
sleep(0.02)
for _ in track(range(100), description='[green]Processing data'):
process_data()
Вывод:
Если мы хотим записать время завершения выполнения конкретной задачи, мы можем использовать вместо этого console.status
.
from rich.console import Console
from time import sleep
console = Console()
data = [1, 2, 3, 4, 5]
with console.status("[bold green]Fetching data...") as status:
while data:
num = data.pop(0)
sleep(1)
console.log(f"[green]Finish fetching data[/green] {num}")
console.log(f'[bold][red]Done!')
Вы можете работать напрямую с классом Progress, если вам нужно несколько задач на дисплее или вы хотите настроить столбцы на дисплее прогресса. После создания объекта Progress используйте ( add_task()
) для добавления задач и ( update_progress()
) для обновления хода выполнения.
Класс Progress предназначен для использования в качестве менеджера контекста, автоматически запускающего и останавливающего отображение прогресса.
import time
from rich.progress import Progress
with Progress() as progress:
task1 = progress.add_task("[red]Downloading...", total=100)
task2 = progress.add_task("[green]Processing...", total=100)
task3 = progress.add_task("[cyan]Installing...", total=100)
while not progress.finished:
progress.update(task1, advance=0.9)
progress.update(task2, advance=0.6)
progress.update(task3, advance=0.3)
time.sleep(0.02)
Вывод:
Как отобразить столбцы в Python с помощью Rich
Rich может отображать текст или другие визуализируемые объекты Rich в аккуратных столбцах с помощью класса Columns
. Для использования, создайте экземпляр Columns с итерацией объектов рендеринга и выведите его в консоли.
Вывод:
Как отображать таблицы в Python с помощью Rich
Класс Table
предлагает множество способов вывода табличных данных на терминал. Этот класс имеет методы add_column()
и add_row()
для добавления столбца и строки соответственно в экземпляр таблицы, созданный из класса Table
.
Давайте создадим таблицу для нашего списка дел. В этой таблице будет три столбца – S.No., Задача и Статус.
from rich.console import Console
from rich.table import Table
table = Table(title="Todo List")
table.add_column("S. No.", style="cyan", no_wrap=True)
table.add_column("Task", style="magenta")
table.add_column("Status", justify="right", style="green")
table.add_row("1", "Buy Milk", "✅")
table.add_row("2", "Buy Bread", "✅")
table.add_row("3", "Buy Jam", "❌")
console = Console()
console.print(table)
Вывод:
Подведение итогов
В этом уроке мы узнали, как использовать Rich для украшения терминала. Есть много других функций, которые поддерживает Rich. Подробнее о них читайте в официальной документации.
Не стесняйтесь экспериментировать с исходным кодом этой статьи здесь.
Спасибо за чтение!