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中title()方法的使用简介
May 20 Python
Django实现图片文字同时提交的方法
May 26 Python
Python3控制路由器——使用requests重启极路由.py
May 11 Python
python实现rsa加密实例详解
Jul 19 Python
基于python的字节编译详解
Sep 20 Python
Python日期时间对象转换为字符串的实例
Jun 22 Python
Python在图片中插入大量文字并且自动换行
Jan 02 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
如何利用Anaconda配置简单的Python环境
Jun 24 Python
Python使用scipy模块实现一维卷积运算示例
Sep 05 Python
Python字符串中删除特定字符的方法
Jan 15 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 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实现 使用PHP数组内部指针操作函数
2010/10/12 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
javaScript对象和属性的创建方法
2007/01/15 Javascript
firefo xml 读写实现js代码
2009/06/11 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
2010/02/07 Javascript
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
详解webpack和webpack-simple中如何引入css文件
2017/06/28 Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
2018/11/27 jQuery
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
2019/01/09 jQuery
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
Python global全局变量函数详解
2018/09/18 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
基于python调用psutil模块过程解析
2019/12/20 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
为什么要有struct关键字
2012/05/08 面试题
中间件分为哪几类
2016/09/18 面试题
最新结婚典礼主持词
2014/03/14 职场文书
计算机毕业生求职信
2014/06/10 职场文书
营销与策划专业求职信
2014/06/20 职场文书
培训师岗位职责
2015/02/14 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书