热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonrich_Python本月热门项目:用rich库丰富和美化终端输出

您的浏览器不支持audio标签。如何美化python终端输出的json或dict格式呢?一般开发者们会选用pprint,或直接copy输出结果ÿ

您的浏览器不支持 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库丰富和美化终端输出



推荐阅读
author-avatar
每天进步一点就好
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有