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文件读写并使用mysql批量插入示例分享(python操作mysql)
Feb 17 Python
python中list常用操作实例详解
Jun 03 Python
Python实现Mysql数据库连接池实例详解
Apr 11 Python
python实现随机森林random forest的原理及方法
Dec 21 Python
Python建立Map写Excel表实例解析
Jan 17 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 Python
Python浮点数四舍五入问题的分析与解决方法
Nov 19 Python
python中return不返回值的问题解析
Jul 22 Python
python中的垃圾回收(GC)机制
Sep 21 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 02 Python
浅谈Python中的函数(def)及参数传递操作
May 25 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图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
PHP IE中下载附件问题解决方法
2014/01/07 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
laravel中短信发送验证码的实现方法
2018/04/25 PHP
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
JavaScript添加随滚动条滚动窗体的方法
2016/02/23 Javascript
KnockoutJs快速入门教程
2016/05/16 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
微信小程序 获取javascript 里的数据
2017/08/17 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
详解bootstrap导航栏.nav与.navbar区别
2017/11/23 Javascript
使用puppeteer破解极验的滑动验证码
2018/02/24 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
Python深入学习之特殊方法与多范式
2014/08/31 Python
python命令行参数解析OptionParser类用法实例
2014/10/09 Python
Python性能优化的20条建议
2014/10/25 Python
Python命令行解析模块详解
2018/02/01 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
Python实现最大子序和的方法示例
2019/07/05 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
2019/10/12 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
苹果Mac升级:MacSales.com
2017/11/20 全球购物
护理不良事件检讨书
2014/02/06 职场文书
微笑面对生活演讲稿
2014/05/13 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
党建工作汇报材料
2014/12/24 职场文书
Python基础之进程详解
2021/05/21 Python