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 11 Python
Python和C/C++交互的几种方法总结
May 11 Python
Python实现购物程序思路及代码
Jul 24 Python
python学生信息管理系统
Mar 13 Python
python中csv文件的若干读写方法小结
Jul 04 Python
tensorflow实现加载mnist数据集
Sep 08 Python
Python中Proxypool库的安装与配置
Oct 19 Python
详解Python3除法之真除法、截断除法和下取整对比
May 23 Python
Django 项目布局方法(值得推荐)
Mar 22 Python
python实现简单遗传算法
Sep 18 Python
python绘图模块之利用turtle画图
Feb 12 Python
python使用pycharm安装pyqt5以及相关配置
Apr 22 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中面向对象三大特性之一[封装性]的应用
2011/06/13 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
深入理解JavaScript 参数按值传递
2017/05/24 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
js布局实现单选按钮控件
2020/01/17 Javascript
使用js实现单链解决前端队列问题的方法
2020/02/03 Javascript
详解Django中的权限和组以及消息
2015/07/23 Python
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
python 监控logcat关键字功能
2020/09/04 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
《胖乎乎的小手》教学反思
2014/02/26 职场文书
党员实事承诺书
2014/03/26 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
ktv好的活动方案
2014/08/17 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
2014年施工员工作总结
2014/11/18 职场文书
经验交流材料格式
2014/12/30 职场文书
公司总经理岗位职责
2015/04/01 职场文书
穆斯林的葬礼读书笔记
2015/06/26 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
导游词之临安白水涧
2019/11/05 职场文书
Python中基础数据类型 set集合知识点总结
2021/08/02 Python