您的浏览器不支持 audio 标签。
如何美化python终端输出的json或dict格式呢?一般开发者们会选用pprint,或直接copy输出结果,在vscode或其他美化json的页面格式化一下,因为格式美化输出并不是刚需,仅仅是为了便于理解。一般仅在比较成熟的项目上,想要美化下的化,就可以使用这篇文章推荐的rich库了。
0.安装
pip install rich
1.基本用法
from rich.console import Console
from rich.theme import Theme
custom_theme = Theme({
"info" : "dim cyan",
"warning": "magenta",
"danger": "bold red"
})
console = Console(theme=custom_theme)
console.print("This is information", style="info")
console.print("Something terrible happened!", style="danger")
console.print("Google", style="link https://google.com")
2.其他用法
1.格式化json文本
2.表格输出
还有其他的,比如markdown输出等等。稍微参考下就可以上手,本站以下面的progress为例,实际演示下:
3. Progress制作下载进度条
效果图如下:
实现代码:
import os
from concurrent.futures import ThreadPoolExecutor
from typing import Iterable
from urllib.request import urlretrieve
from rich.progress import (
BarColumn,
DownloadColumn,
TextColumn,
TransferSpeedColumn,
TimeRemainingColumn,
Progress,
TaskID,
)
progress = Progress(
TextColumn("[bold blue]{task.fields[filename]}", justify="right"),
BarColumn(bar_width=None),
"[progress.percentage]{task.percentage:>3.1f}%",
"•",
DownloadColumn(),
"•",
TransferSpeedColumn(),
"•",
TimeRemainingColumn(),
)
class progress_bar():
def __init__(self, task_id):
self.task_id = task_id
def __call__(self, block_num, block_size, total_size):
progress.update(self.task_id, advance=1 * block_size, total=total_size)
def touch(fname, times=None):
with open(fname, 'a'):
os.utime(fname, times)
def copy_url(task_id: TaskID, url: str, path: str) -> None:
"""Copy data from a url to a local file."""
urlretrieve(url, path, progress_bar(task_id))
touch(path + ".done")
def download(urls: Iterable[str], dest_dir: str):
"""Download multuple files to the given directory."""
with progress:
with ThreadPoolExecutor(max_workers=4) as pool:
for url in urls:
filename = url.split("/")[-1]
dest_path = os.path.join(dest_dir, filename)
task_id = progress.add_task("download", filename=filename)
pool.submit(copy_url, task_id, url, dest_path)
if __name__ == "__main__":
urls = ["https://xxxx","https://xxxx"] #此处为需要下载的资源列表,链接地址
download(urls,"./") #填入下载的资源列表,默认输出在当面目录
4. 小结
关于美化是否有必要?个人认为,如果不是最终商用输出,估计一辈子也不会用到此类工具。但是如果你想要输出带点色彩,那么这个rich库则是最佳选择,使用该库可以轻易做到美化的显示输出。那么,最为开发人员,你需要彩色吗?答案肯定是否!但是从小白或受众用户而言,添加这个则是锦上添花,很有必要。所以该库的使用也是非常矛盾的。顺便一提的是,jupyter的官方实验室没有把我打进jupyter的大门,微软的jupyter也没有,最终反而是谷歌的Colaboratory把我带进了jupyter。被谷歌提供的各种案例、机器学习给折服了。或许只有最终应用,才能凸显意义,否则就算有再好的工具,也没意义,而本篇的rich库就是这样,知道是好东西,只有广泛使用了才是你的。
佰阅部落 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python本月热门项目:用rich库丰富和美化终端输出