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中处理字符串之ljust()方法的使用简介
May 19 Python
python实现简单淘宝秒杀功能
May 03 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
python 设置输出图像的像素大小方法
Jul 04 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
Sep 20 Python
python实现超市管理系统(后台管理)
Oct 25 Python
python的Jenkins接口调用方式
May 12 Python
python利用opencv保存、播放视频
Nov 02 Python
DRF使用simple JWT身份验证的实现
Jan 14 Python
Python基础之数据结构详解
Apr 28 Python
Python matplotlib可视化之绘制韦恩图
Feb 24 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+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
通过正则表达式实现表单验证是否为中文
2014/02/18 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
vue2项目使用sass的示例代码
2017/06/28 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
2019/05/10 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
Python能做什么
2020/06/02 Python
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
室内设计自我鉴定
2013/10/15 职场文书
普罗米修斯教学反思
2014/02/06 职场文书
经济职业学院毕业生自荐书
2014/03/17 职场文书
护士长竞聘书
2014/03/31 职场文书
联片教研活动总结
2014/07/01 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
2016年暑假学生家长评语
2015/12/01 职场文书
公司晚会主持词
2019/04/17 职场文书
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js