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表格存取的方法
Mar 07 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
May 30 Python
Python SQL查询并生成json文件操作示例
Aug 17 Python
Python爬虫实现验证码登录代码实例
May 10 Python
浅析Python 引号、注释、字符串
Jul 25 Python
使用python将excel数据导入数据库过程详解
Aug 27 Python
Python 继承,重写,super()调用父类方法操作示例
Sep 29 Python
一文读懂Python 枚举
Aug 25 Python
python3定位并识别图片验证码实现自动登录功能
Jan 29 Python
pycharm配置python 设置pip安装源为豆瓣源
Feb 05 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 Python
Django基础CBV装饰器和中间件
Mar 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
玩转虚拟域名◎+ .
2006/10/09 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
js格式化输入框内金额、银行卡号
2016/02/01 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
深入理解JavaScript继承的多种方式和优缺点
2017/05/12 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
JS document对象简单用法完整示例
2020/01/14 Javascript
python和C语言混合编程实例
2014/06/04 Python
Python中一些自然语言工具的使用的入门教程
2015/04/13 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
python中logging库的使用总结
2017/10/18 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
Python3中详解fabfile的编写
2018/06/24 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
Django CSRF跨站请求伪造防护过程解析
2019/07/31 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
本科生详细的自我评价
2013/09/19 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
2015安全保卫工作总结
2015/04/25 职场文书
CSS预处理框架——Stylus
2021/04/21 HTML / CSS
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL