给Python代码加上酷炫进度条的几种姿势
作者 | 刘早起
来源 | 早起Python(ID: zaoqi-python)
大家好,在下载某些文件的时候你一定会不时盯着进度条,在写代码的时候使用进度条可以便捷的观察任务处理情况,除了使用print来打印之外,今天本文就介绍几种给你的Python代码加上酷炫的进度条的方式。
自定义ProgressBar
最原始的办法就是不借助任何第三方工具,自己写一个进度条函数,使用time模块配合sys模块即可
import sys
import timedef progressbar(it, prefix="", size=60, file=sys.stdout):count = len(it)def show(j):x = int(size*j/count)file.write("%s[%s%s] %i/%i\r" % (prefix, "#"*x, "."*(size-x), j, count))file.flush() show(0)for i, item in enumerate(it):yield itemshow(i+1)file.write("\n")file.flush()for i in progressbar(range(15), "Computing: ", 40):do_something()time.sleep(0.1)
自己定义的好处就是可以将进度条定义成我们想要的形式比如上面就是使用#与·来输出,为什么不用print?因为sys.stdout就是print的一种默认输出格式,而sys.stdout.write()可以不换行打印,sys.stdout.flush()可以立即刷新输出的内容。当然也可以封装成类来更好的使用[1] ,但效果是类似的。
from __future__ import print_function
import sys
import reclass ProgressBar(object):DEFAULT = 'Progress: %(bar)s %(percent)3d%%'FULL = '%(bar)s %(current)d/%(total)d (%(percent)3d%%) %(remaining)d to go'def __init__(self, total, width=40, fmt=DEFAULT, symbol='=',output=sys.stderr):assert len(symbol) == 1self.total = totalself.width = widthself.symbol = symbolself.output = outputself.fmt = re.sub(r'(?P<name>%\(.+?\))d',r'\g<name>%dd' % len(str(total)), fmt)self.current = 0def __call__(self):percent = self.current / float(self.total)size = int(self.width * percent)remaining = self.total - self.currentbar = '[' + self.symbol * size + ' ' * (self.width - size) + ']'args = {'total': self.total,'bar': bar,'current': self.current,'percent': percent * 100,'remaining': remaining}print('\r' + self.fmt % args, file=self.output, end='')def done(self):self.current = self.totalself()print('', file=self.output)from time import sleepprogress = ProgressBar(80, fmt=ProgressBar.FULL)for x in range(progress.total):progress.current += 1progress()sleep(0.1)
progress.done()
tqdm
之前我们说了,自定义的好处就是可以自己修改,那么使用第三方库的好处就是可以偷懒,不用自己写,拿来就能用。比如提到Python进度条那肯定会想到常用的tqdm,安装很简单pip install tqdm即可,使用也很简单,几行代码即可实现上面的进度条
from tqdm import trange
import time
for i in trange(10): time.sleep(1)
当然tqdm作为老牌的Python进度条工具,循环处理、多进程、多线程、递归处理等都是支持的,你可以在官方GitHub上学习[2] 、解锁更多的玩法。
Rich
上面两种实现Python进度条的方法都学会了吗,虽然简单但是看上去并不漂亮,颜色也比较单调。所以最后压轴出场的就是一款比较小众的第三方库Rich[3] 。Rich主要是用于在终端中打印丰富多彩的文本(最高支持1670万色)
所以当然可以使用Rich打印进度条,显示完成百分比,剩余时间,数据传输速度等都可以。并且样式更加酷炫,并且它是高度可配置的,因此我们可以对其进行自定义以显示所需的任何信息。使用也很简单,比如我们使用Rich来实现一个最简单的进度条。
from rich.progress import track
import timefor step in track(range(30)):print('早起Python')time.sleep(0.5)
同时Rich支持多个进度条,这在多任务情况下监控的进度很有用(使用方法见官方文档)
参考资料
[1]stackoverflow: https://stackoverflow.com/questions/3160699/python-progress-bar
[2]Tqdm: https://github.com/tqdm/tqdm
[3]Rich: https://github.com/willmcgugan/rich
推荐阅读
懂语言者得天下:NLP凭什么被称为人工智能的掌上明珠?
如何用NLP辅助投资分析?三大海外机构落地案例详解
张红忠:智慧化时代,如何通吃5G模组、AIoT?
屏保壁纸引发血案,三星手机瞬间变砖
借助大数据进行社交媒体营销,企业们得这么玩!
力挺比特币的世界第2交易员:仅次于索罗斯,连续25年无亏损
你点的每个“在看”,我都认真当成了喜欢
相关文章:

(转)mongodb分片
本文转载自:http://www.cnblogs.com/huangxincheng/archive/2012/03/07/2383284.html 在mongodb里面存在另一种集群,就是分片技术,跟sql server的表分区类似,我们知道当数据量达到T级别的时候,我们的磁盘,内…

深入浅出paxos
原文 https://rebootcat.com/2020/12/05/paxos/
Uber 前无人驾驶工程师告诉你,国内无人驾驶之路还要走多久?
受访者 | Graviti 创始人&CEO 崔运凯记者 | Aholiab,编辑 | Carol出品 | AI科技大本营(ID:rgznai100)经过数年的发展,现在的人们谈到“AI”已经不再像过去一般感到遥不可及。但 AI 在国内发挥的作用仍然只是冰山一角ÿ…

oracle服务
OracleOraDb11g_home1ClrAgent服务,在网上查找到了资料 http://download.oracle.com/docs/cd/B19306_01/win.102/b14306/install.htm Configuring Extproc Agent Using Windows Service As part of Oracle Database Extensions for .NET installation, a Windows se…

B00009 C语言分割字符串库函数strtok
切割字符串是常用的处理。 这里给出一个使用函数strtok切割字符串的例子。 使用C语言的库函数strtok来切割字符串的好处在于,可以指定任意字符作为分隔符来切割单词。使用该函数,切割字符串的分隔符可以同时指定多个,放在一个字符串数组中。 …

WEB打印大全
1、控制"纵打"、 横打”和“页面的边距。 (1)<script defer> function SetPrintSettings() { // -- advanced features factory.printing.SetMarginMeasure(2) // measure margins in inches factory.SetPageRange(false, 1, 3) // ne…
漫画 | 程序媛小姐姐带你一次了解什么是排序算法
来源 | 小齐本齐封图 | CSDN 付费下载自视觉中国插入排序借用《算法导论》里的例子,就是我们打牌的时候,每新拿一张牌都会把它按顺序插入,这,其实就是插入排序。齐姐声明:虽然我们用打牌的例子,但是可不能学…

POJ 1207 The 3n + 1 problem
题目链接:http://poj.org/problem?id1207 题目大意:给你一个数x,规定一个函数F(x),如果x为1则F(x)1,否则如果x是偶数,F(x)F(x/2),x为奇数F(x)F(3*x1)计算给定x到变换到1的步数。 注意点&#x…

PopupWindow响应返回键的问题
假设情景是这样的:在一个Activity中弹出一个PopupWindow,要求在按返回键时关闭该PopupWindow。 如果该PopupWindow是无焦点的(默认情况),那么可以在Activity中响应返回键(onBackPressed)&#x…

Unix / Linux世界里的4-2-1
Unix / Linux世界里的4-2-1 在Unix / Linux世界里,4代表可读( r ),2代表可写入 ( w ),1代表可执行 ( x ) 如果拥有7 421 的权限,即代表这个人可以对档案完全控制。 以0777为例: 去掉0,第一个7代表着拥有者…
深度学习概述:NLP vs CNN
作者 | Manish Kuwar译者 | 苏本如,责编 | 郭芮头图 | CSDN 下载自视觉中国出品 | CSDN(ID:CSDNnews)以下为译文:当今,人工智能已经不仅仅是一个技术术语了。这项技术在过去十年的时间内几乎将其影响扩展到…

oracle 求A中不存在于B的记录
oracle 求A中不存在于B的记录 select * from a minus select * from b 是求A中不存在于B的记录select * from a union select * from b 是求A和B的DISTINCT的并集select * from a union all select * from b 是求A和B的冗余并集那么A和B的交集是什么函数来的?交集是 INTERSE…

正则表达式grep、egrep--already
第一式 grep是什么 #man grepgrep(global search regular expression(RE)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。UNIX的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令…
万字长文综述目标检测领域,你要的都在这里
来源 | AI专栏(ID: pursue-Y-future)目标检测是计算机视觉中的一个重要问题,近年来传统检测方法已难以满足人们对目标检测效果的要求,随着深度学习在图像分类任务上取得巨大进展,基于深度学习的目标检测算法逐渐成为主…

ASP.net随机数应用实例
家可能都用过Chinaren的校友录,不久前它的留言簿上加了一个防止灌水的方法,就是系统每次产生一个由随机的数字和字母组成的图片,每次留言必须正确地输入这些随机产生的字符,否则不能添加留言。这是一个很好的防止恶意攻击的方法&a…

PreferenceActivity是什么?
我们看到Android系统本身就大量用到了PreferenceActivity来对系统进行信息配置和管理,那么它是怎么保存数据的呢,如何创建PrefenceActivity的呢?创建Android项目,并添加一个pref.xml文件(先建一个xml名的Folder)。注意,这次选择的…
坑系列 --- 时间和空间的平衡
这是坑系列的最后一弹了,这篇文章非常长,希望你能看完,要是看完有很酣畅的感觉就最好了。这一篇的坑主要来说说架构中时间和空间的平衡吧,这里的时间指代比较广,可能是开发时间,但大部分指的是执行时间&…

C#中调用Windows API的要点
在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的。本文将C#中调用API的要点汇集如下,希望给未在C#中使用过API的朋友一点帮助。另外如果安装了Visual Studio .net的话&…
线上直播丨Hinton等6位图灵奖得主、百余位顶级学者邀你群聊AI
Geoffrey Hinton等6位图灵奖得主亲临,百余位顶级学者邀请你加入群聊「2020北京智源大会」,深入系统探讨「人工智能的下一个十年」。自2009年深度学习崛起以来,第三波人工智能浪潮席卷全球,推动了新一波技术革命。在这波澜壮阔的11…

ServerSocket
ServerScoket 这个类用于与 Socket 进行通信。 在实例化ServerSocket 的时候,服务器相当于已经开始了,但是还需要通过socket来accept (socket serverSocket.accept())以使服务器选择性与某一Client进行连接。如果有指定了允许连接…

NDK开发 - C/C++ 访问 Java 变量和方法
上一篇有提到 JNI 访问引用数组,涉及了 C/C 访问 Java 实例的方法和变量。虽然在之前的开发中,并没有用到 C/C 范围 Java 层数据,但是这部分内容还是很有用的。传送门:NDK开发 - C/C 访问 Java 变量和方法 C/C 访问 Java 层的方法…

在C#中应用哈希表(Hashtable)
一,哈希表(Hashtable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的…
俄罗斯自研Elbrus CPU参数曝光,CEO年近九旬仍未退休
导语:俄罗斯自研 CPU 参数最近曝光,虽然比起主流产品仍存在较大差距,但是这也是俄罗斯在自研道路上的一大进展。虽说自研 CPU 并非易事,但为了避免被美国牵制,很多国家都在这方面投入了巨大的人力与资金。战斗民族俄罗…

停止Password Manager Agent服务导致应用程序启动缓慢
在一个实施环境中,部署了Password Manager用来实现单点登录功能,但是由于Password Manager的提示基本都是以英文为主,而且配置也比较麻烦,普通用户看见会比较影响用户体验,所以用户决定暂时关闭Password Manager功能&a…

web 前端常用组件【06】Upload 控件
因为有万恶的IE存在,所以当Web项目初始化并进入开发阶段时。 如果是项目经理,需要知道客户将会用什么浏览器来访问系统。 明确知道限定浏览器的情况下,你才能从容的让手下的封装必要的前端组件。 本篇文章试图从常见的上传方式和组件进行分析…
性能超越最新序列推荐模型,华为诺亚方舟提出记忆增强的图神经网络
作者 | Chen Ma, Liheng Ma等译者 | Rachel出品 | AI科技大本营(ID:rgznai100)用户-商品交互的时间顺序可以揭示出推荐系统中用户行为随时间演进的序列性特征。用户与之交互的商品可能受到用户曾经接触的商品的影响。但是,用户和商…

ASP.net 中的页面继承实现和通用页面的工厂模式的实现
最近用.Net做web项目的时候遇到了一些问题,就是很多的页面的处理一样的,不一样的就是我们写的存储过程不同,为了考虑代码的重复利用和可维护性和可 扩展性,于是写了一个对于单据页面的工厂模式,采用界面的继承技术&…

5502的时钟组
5502有四个时钟组,分别为: C55x Subsystem Clock GroupFast Peripherals Clock GroupSlow Peripherals Clock GroupExternal Memory Interface Clock Group1、C55x Subsystem Clock Group该时钟组包括C55X CPU core、内存(DARAM和ROM…

遇到的浏览器兼容问题及应对方法
前言: 上周天的时候有个学长找我帮忙做三张页面,因为没有数据交换之类的,只是单纯的前端页面,想着好久没做东西, 看书都看烦了,所以就接了也当是练手。之前因为没有系统的看书,所以其实很多问题…

浅谈权限设计(来自深空老大)
2019独角兽企业重金招聘Python工程师标准>>> By 深空, 2009-09-13 21:45:07 PHPChina的专家版在谈权限设计,苦于没有权限回帖,特发此博文谈谈简单的权限设计。讨论在这里。 最简单的权限验证,应该是登录态的验证,如果登…