Cómo usar la biblioteca Rich con Python
En este artículo, aprenderemos sobre una poderosa biblioteca para Python llamada Rich .
Rich es una biblioteca de Python para escribir texto enriquecido (con color y estilo) en la terminal. Le permite mostrar contenido avanzado, como tablas, marcado y código resaltado por sintaxis.
Entonces, ¿por qué es esto útil? Bueno, si no estás usando una herramienta como Rich, la salida de tu código en la terminal puede ser un poco aburrida y difícil de entender. Si desea hacerlo más claro y bonito, probablemente quiera usar Rich, y ha venido al lugar correcto para aprender cómo hacerlo.
Cómo instalar Rich
Puede instalar Rich con pip como:
pip install Rich
Para saber lo que puede hacer todo Rich, puedes escribir el siguiente comando en la terminal:
python -m rich
Ahora puedes ver que podemos hacer muchas cosas con Rich. Probemos algunos de ellos para ver cómo funcionan.
Cómo imprimir valores enriquecidos en Python
Rich tiene la capacidad de resaltar la salida según el tipo de datos. Importaremos la print
función alternativa de la biblioteca Rich que toma los mismos argumentos que el print
.
Para evitar confusiones con la función print
integrada, importaremos print
desde la bibliotecarich
como rprint
.
from rich import print as rprintnums_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)
Producción:
¿Ves cómo los diferentes tipos de datos se resaltan con diferentes colores? Esto puede ayudarnos mucho durante la depuración.
Cómo realizar una inspección enriquecida en Python
Si usa la help
función incorporada para ver la documentación de una biblioteca, verá un resultado aburrido.
import richprint(help(rich))
Producción:
Rich tiene una inspect()
función que puede generar un informe sobre cualquier objeto de Python. Es una fantástica ayuda para la depuración y un buen ejemplo de la salida que Rich puede generar.
from rich import inspect
import richinspect(rich)
Producción:
Cómo diseñar tu consola con Rich
Para un control completo sobre el formato de la terminal, Rich ofrece una ClaseConsole
.
Escribamos una función para fusionar los diccionarios de Python .
from rich.console import Consoleconsole = 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'})
Producción:
En el ejemplo anterior, hemos utilizado el log
método que ofrece las mismas capacidades que la impresión, pero agrega algunas funciones útiles para depurar una aplicación en ejecución.
Hay varios otros métodos como print
, print_json
, out
, rule
, etc. Obtenga más información sobre ellos aquí .
Cómo usar Tree en Rich
Rich tiene una claseTree
que puede generar una vista de árbol en la terminal. Una vista de árbol es una excelente manera de presentar el contenido de un sistema de archivos o cualquier otro dato jerárquico. Cada rama del árbol puede tener una etiqueta que puede ser texto o cualquier otro renderizado enriquecido.
Veamos un ejemplo creando un árbol genealógico:
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)
Producción:
Una vez que creamos una instancia de la Tree
clase, podemos usar el add()
método para agregarle ramas. Para crear un árbol complejo, solo usa el add()
método para agregarle más ramas. Observe la rama Hermano y Hermana en el ejemplo anterior.
En la documentación oficial, tenemos un archivo tree.py que genera la estructura del archivo usando Tree. La salida se ve así:
Cómo mostrar una barra de progreso usando Rich
Rich puede mostrar información continuamente actualizada sobre el estado de las tareas de ejecución prolongada, copias de archivos, etc. También puede personalizar esta información. De forma predeterminada, proporciona una descripción de la ‘tarea’, una barra de progreso, el porcentaje completado y el tiempo restante anticipado.
Se admiten múltiples tareas con una rica pantalla de progreso, cada una con una barra y estadísticas de progreso. Puede usar esto para realizar un seguimiento de varios trabajos en los que se está trabajando en procesos o subprocesos.
Primero probemos el método progress.track
para crear la barra de progreso.
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()
Producción:
Si queremos registrar la hora en que se termina de ejecutar una tarea en particular, podemos usarla en su lugarconsole.status
.
from rich.console import Console
from time import sleepconsole = 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!')
Puede trabajar directamente con la clase Progreso si necesita varias tareas en la pantalla o desea personalizar las columnas en la pantalla de progreso. Después de haber creado un objeto de Progreso, use ( add_task()
) para agregar tareas y ( update_progress()
) para actualizar el progreso.
La clase Progress está diseñada para usarse como un administrador de contexto, iniciando y deteniendo automáticamente la visualización del progreso.
import timefrom rich.progress import Progresswith 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)
Producción:
Cómo mostrar columnas enriquecidas en Python
Rich puede representar texto u otros elementos de Rich en columnas ordenadas con la claseColumns
. Para usar, construya una instancia de Columns con una iteración de renderizables e imprímala en la Consola.
import json
from urllib.request import urlopenfrom rich.console import Console
from rich.columns import Columns
from rich.panel import Panel
def get_content(user):
"""Extract text from user dict."""
country = user["location"]["country"]
name = f"{user['name']['first']} {user['name']['last']}"
return f"[b]{name}[/b]\n[yellow]{country}"
console = Console()
users = json.loads(urlopen("https://randomuser.me/api/?results=30").read())["results"]
user_renderables = [Panel(get_content(user), expand=True) for user in users]
console.print(Columns(user_renderables))
Producción:
Cómo mostrar tablas enriquecidas en Python
La clase de Rich Table
ofrece una variedad de formas de representar datos tabulares en la terminal. Esta clase tiene métodos add_column()
para add_row()
agregar columnas y filas respectivamente a la instancia de la tabla creada a partir de la ClaseTable
.
Vamos a crear una tabla para nuestra lista de tareas pendientes. Esta tabla tendrá tres columnas: S.No. , Tarea y Estado .
from rich.console import Console
from rich.table import Tabletable = 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)
Producción:
Terminando
En este tutorial, aprendimos a usar Rich para embellecer la terminal. Hay muchas otras funciones compatibles con Rich. Obtenga más información sobre ellos en la documentación oficial .