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异常学习笔记
Feb 03 Python
使用Flask集成bootstrap的方法
Jul 24 Python
对python PLT中的image和skimage处理图片方法详解
Jan 10 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
详解用Python实现自动化监控远程服务器
May 18 Python
python调用摄像头拍摄数据集
Jun 01 Python
Python实现自定义读写分离代码实例
Nov 16 Python
python标准库os库的函数介绍
Feb 12 Python
PIL包中Image模块的convert()函数的具体使用
Feb 26 Python
python对接ihuyi实现短信验证码发送
May 10 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 04 Python
Python中Schedule模块使用详解 周期任务神器
Apr 19 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
使用数据库保存session的方法
2006/10/09 PHP
php下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
php探针使用原理和技巧讲解
2019/09/17 PHP
TopList标签和JavaScript结合两例
2007/08/12 Javascript
地震发生中逃生十大法则
2008/05/12 Javascript
jQuery之浮动窗口实现代码(两种方法)
2010/09/08 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
基于jQuery实现自动轮播旋转木马特效
2015/11/02 Javascript
详解JavaScript中localStorage使用要点
2016/01/13 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
手把手带你入门微信小程序新框架Kbone的使用
2020/02/25 Javascript
python读写ini文件示例(python读写文件)
2014/03/25 Python
PyCharm代码格式调整方法
2018/05/23 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
python 爬虫请求模块requests详解
2020/12/04 Python
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
PHP面试题-$message和$$message的区别
2015/12/08 面试题
优纳科技软件测试面试题
2012/05/15 面试题
UNIX特点都有哪些
2016/04/05 面试题
英语自荐信范文
2013/12/11 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
HTML基础详解(上)
2021/10/16 HTML / CSS
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL