Python在Console下显示文本进度条的方法


Posted in Python onFebruary 14, 2016

进度条实现原理

进度条和一般的print区别在哪里呢?
答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过stdout输出的东西依旧保留,而且保证我们在下面看到最新的输出结果。
进度条不然,我们必须再原地输出才能保证他是一个进度条,否则换行了怎么还叫进度条?
实现进度条最简单的办法就是,在输出完毕后,把光标移动到行首,继续在那里输出更长的进度条即可实现,新的更长的进度条把旧的短覆盖,就形成了动画效果。

在用Python处理耗时的任务时,往往希望能够了解到任务当前的处理进度,这个时候需要在任务中不断打印出任务的进度信息。一般我们是这样的:

def process_mission():
""" 任务处理方法 """
# 这里是任务处理过程
print('当前处理到第[%d]项' % count)
# 这里是任务处理过程

这种方式会在窗口输出一堆类似下面这样的信息:

当前处理到第1项
当前处理到第2项
当前处理到第3项
当前处理到第4项
当前处理到第5项
....

这种信息有可能非常非常的长,也有可能输出的时候非常非常的快,以至于根本就无法看清楚(输出非常快的时候)。

这时候,我们期待这样的功能:

[================== ] 25.60%

但如果纯粹的使用 print 是无法达到效果的,会变成和前面一样,满屏都是这种杠杠。

如何正确显示进度条呢?

Python提供了一个模块,叫: progressbar ,当使用这个模块之后,你要显示进度的仅需如下:

import progressbar
# 先定义一个进度条
# http://blog.useasp.net/
pbar = progressbar.ProgressBar(maxval=100, \
widgets=[progressbar.Bar('=', '[', ']'), ' ', \
progressbar.Percentage()])
for i in xrange(100):
# 更新进度条
pbar.update(i+1)
pbar.finish()

# Ok,到此完结。

是不是很容易就完成进度条的显示?不过遗憾的是,这个python模块并不是默认的,而是需要安装:

pip install progressbar

如果没有安装 pip 可以 参考这里 。

对于只要一个简单进度条的人来说,安装个python包似乎有点动静太大,那么,自己动手写一个便是了。

下面是Mitchell自己写的一个类似的进度条,不用安装包,简单易用。

# 在使用本方法之前,请先做如下import
# from __future__ import division
# import math
# import sys
# ##blog.useasp.net##
def progressbar(cur, total):
percent = '{:.2%}'.format(cur / total)
sys.stdout.write('\r')
sys.stdout.write("[%-50s] %s" % (
'=' * int(math.floor(cur * 50 / total)),
percent))
sys.stdout.flush()

说明:

cur , total :一个是当前值,一个是总值。 cur 在任务的处理过程中会不断向 total 靠近,直到两者相等,任务结束

需要注意的是,这两个可能为整型,因此要引入 division 。

在使用的时候,只需要调用 progressbar 即可在控制台输出进度条。

# 调用方式举例
progressbar(2, 100)
progressbar(3.9, 10)
progressbar(3283, 27379)

到此,我们完成了一个会在控制台动态更新的进度条。

以上所述是小编给大家介绍的Python在Console下显示文本进度条的方法,希望对大家有所帮助。

Python 相关文章推荐
跟老齐学Python之集合的关系
Sep 24 Python
python中安装模块包版本冲突问题的解决
May 02 Python
python 第三方库的安装及pip的使用详解
May 11 Python
Python实现选择排序
Jun 04 Python
Python实现简单的HttpServer服务器示例
Sep 25 Python
Python获取二维矩阵每列最大值的方法
Apr 03 Python
详解如何用django实现redirect的几种方法总结
Nov 22 Python
python中break、continue 、exit() 、pass终止循环的区别详解
Jul 08 Python
基于多进程中APScheduler重复运行的解决方法
Jul 22 Python
python 命令行传入参数实现解析
Aug 30 Python
python输入错误后删除的方法
Oct 12 Python
基于python2.7实现图形密码生成器的实例代码
Nov 05 Python
如何使用python爬取csdn博客访问量
Feb 14 #Python
python动态网页批量爬取
Feb 14 #Python
Python ftp上传文件
Feb 13 #Python
Python cx_freeze打包工具处理问题思路及解决办法
Feb 13 #Python
Python批量创建迅雷任务及创建多个文件
Feb 13 #Python
Python 中 Meta Classes详解
Feb 13 #Python
教大家使用Python SqlAlchemy
Feb 12 #Python
You might like
献给php初学者(入门学习经验谈)
2010/10/12 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
PHP函数积累总结
2019/03/19 PHP
jquery自定义下拉列表示例
2014/04/25 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
2016/01/28 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
Bootstrap常用组件学习(整理)
2017/03/24 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
浅谈React的最大亮点之虚拟DOM
2018/05/29 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
vue实现侧边栏导航效果
2019/10/21 Javascript
vue:el-input输入时限制输入的类型操作
2020/08/05 Javascript
Python处理字符串之isspace()方法的使用
2015/05/19 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
python Shapely使用指南详解
2020/02/18 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
日本必酷网络直营店:Biccamera
2019/03/23 全球购物
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
通信工程毕业生自荐信
2013/11/01 职场文书
影视艺术学院毕业生自荐信
2013/11/13 职场文书
学雷锋标语
2014/06/25 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
入党积极分子群众意见
2015/06/01 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
Python使用MapReduce进行简单的销售统计
2022/04/22 Python