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列表(list)常用操作方法小结
Feb 02 Python
Python中字典的基本知识初步介绍
May 21 Python
快速解决pandas.read_csv()乱码的问题
Jun 15 Python
python排序函数sort()与sorted()的区别
Sep 18 Python
Linux下python3.6.1环境配置教程
Sep 26 Python
python ---lambda匿名函数介绍
Mar 13 Python
python实现简单日期工具类
Apr 24 Python
Python中@property的理解和使用示例
Jun 11 Python
在OpenCV里实现条码区域识别的方法示例
Dec 04 Python
TFRecord文件查看包含的所有Features代码
Feb 17 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
Feb 25 Python
浅谈Keras中shuffle和validation_split的顺序
Jun 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
php中存储用户ID和密码到mysql数据库的方法
2013/02/06 PHP
ThinkPHP 表单自动验证运用示例
2014/10/13 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
不一样的文字闪烁 轮番闪烁
2009/11/11 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
微信小程序表单弹窗实例
2018/07/19 Javascript
推荐15个最好用的JavaScript代码压缩工具
2019/02/13 Javascript
深入理解python多进程编程
2016/06/12 Python
Python之列表的插入&替换修改方法
2018/06/28 Python
Python中的单行、多行、中文注释方法
2018/07/19 Python
深入理解python中sort()与sorted()的区别
2018/08/29 Python
python hbase读取数据发送kafka的方法
2018/12/27 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
python实现ip地址查询经纬度定位详解
2019/08/30 Python
使用Python爬取弹出窗口信息的实例
2020/03/14 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
实验教师岗位职责
2014/02/13 职场文书
先进班组材料范文
2014/12/25 职场文书
会计求职自荐信范文
2015/03/04 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL
python面向对象版学生信息管理系统
2021/06/24 Python