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下载Bing图片(代码)
Nov 07 Python
Python中getattr函数和hasattr函数作用详解
Jun 14 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
May 16 Python
Python编程之gui程序实现简单文件浏览器代码
Dec 08 Python
matplotlib简介,安装和简单实例代码
Dec 26 Python
使用python进行文本预处理和提取特征的实例
Jun 05 Python
django Serializer序列化使用方法详解
Oct 16 Python
在python中实现对list求和及求积
Nov 14 Python
详解Python Matplot中文显示完美解决方案
Mar 07 Python
详解使用python绘制混淆矩阵(confusion_matrix)
Jul 14 Python
pycharm 实现本地写代码,服务器运行的操作
Jun 08 Python
scrapy中如何设置应用cookies的方法(3种)
Sep 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中判断文件空目录是否有读写权限的函数代码
2012/08/07 PHP
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
javascript获得服务器端控件的ID的实现代码
2011/12/28 Javascript
Function.prototype.call.apply结合用法分析示例
2013/07/03 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
JS显示日历和天气的方法
2016/03/01 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
2019/11/12 Javascript
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
python在控制台输出进度条的方法
2015/06/20 Python
python装饰器与递归算法详解
2016/02/18 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
2020/03/06 Python
python程序如何进行保存
2020/07/03 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
python实现ping命令小程序
2020/12/28 Python
财务部出纳岗位职责
2013/12/22 职场文书
教师节商场活动方案
2014/02/13 职场文书
太太口服液广告词
2014/03/20 职场文书
医药销售自我评价200字
2014/09/11 职场文书
基层干部个人对照检查及整改措施
2014/10/28 职场文书
五年级下册复习计划
2015/01/19 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书
学校趣味运动会开幕词
2016/03/04 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript