在使用 pip 安装时,你会发现有下载进度条,我们也可以借助开源的第三方库来实现这个功能,在项目输出时增加一些可视化效果。

一个简单易用的第三方库是:progress

作者提供了动图很直观地展现了实现的所有输出。

这个库实现了两类样式,一类是有终点的进度条样式,另一类是多用于加载的转圈样式。

import time
from progress.bar import Bar bar = Bar('Processing', max=100, fill='@', suffix='%(percent)d%%')
for i in range(100):
time.sleep(0.1)
bar.next()
bar.finish()

参数定义的功能:

  • max: 进度条最大进度
  • fill:进度条填充的字符
  • suffix:百分比的样式

运行上述代码会得到输出

Processing |@@@@@@                          | 20%

同时也提供上下文的用法(需要用 Github 里的源代码):

with Bar('Processing', max=20) as bar:
for i in range(20):
# Do some work
bar.next()

另一类转圈样式,用法和Bar类似,只要没达到终点就一直调用next方法即可

from progress.spinner import Spinner

spinner = Spinner('Loading ')
while state != 'FINISHED':
# Do some work
spinner.next()

动图里的所有样式都是作者已经实现的派生类,用法基本都一样,当然也可以继承基础类来自己实现更多的功能。

class SlowBar(Bar):
suffix = '%(remaining_hours)d hours remaining'
@property
def remaining_hours(self):
return self.eta // 3600


上面介绍的库,实现的功能很简单,而且默认只能输出到终端。

如果有更复杂的使用场景,推荐使用另一个库:python-progressbar

这个库实现了更多功能,可以自定义组合出一个进度条样式,还可以指定输出流。

基本的使用很简单,可以直接传入迭代对象。

import time
import progressbar for i in progressbar.progressbar(range(100)):
time.sleep(0.02)

输出如下:

70% (70 of 100) |################       | Elapsed Time: 0:00:01 ETA:   0:00:00

也可以生成对象后调用update方法 。

import time
import progressbar bar = progressbar.ProgressBar(max_value=100)
for i in range(100):
time.sleep(0.1)
bar.update(i)

最有特点之处就是可以自定义组件,比如我们来实现类似于动图中转圈加载的样式。

import time
import progressbar widgets = [
'Loading: ',
'[', progressbar.AnimatedMarker(), ']',
' ',
progressbar.Timer()
]
bar = progressbar.ProgressBar(
widgets=widgets, max_value=progressbar.UnknownLength) for i in range(100):
time.sleep(0.5)
bar.update(i)

输出样式是这样的,方括号中的会一直旋转

Loading: [\] Elapsed Time: 0:00:13

更多功能不再赘述,可以查看 Github 中的文档

欢迎关注

微信公众号:面向人生编程

编程思维不应只存留在代码之中,更应伴随于整个人生旅途,这个公众号不只聊技术,还会聊产品/互联网/经济学等广泛话题,所以也欢迎非程序员关注。

Python 输出命令行进度条的更多相关文章

  1. PHP生成linux命令行进度条

    <?php$total = 100; for ($i = 1; $i <= $total; $i++) { printf("progress: [%-50s] %d%% Done ...

  2. [Python]命令行进度条

    关键点是输出'\r'这个字符可以使光标回到一行的开头,这时输出其它内容就会将原内容覆盖. import time import sys def progress_test(): bar_length= ...

  3. python实现命令行解析的argparse的使用

    参考https://docs.python.org/3.6/library/argparse.html argparse模块使编写用户友好的命令行界面变得很容易.程序定义了它需要什么参数,argpar ...

  4. Python:如何显示进度条

    首先,推荐一个组件:progressive 效果如下: 进度条和一般的print区别在哪里呢? 答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过std ...

  5. 基于Python与命令行人脸识别项目(系列一)

    Face Recognition 人脸识别 摘要:本项目face_recognition是一个强大.简单.易上手的人脸识别开源项目,并且配备了完整的开发文档和应用案例,方便大家使用.对于本项目可以使用 ...

  6. python制作命令行工具——fire

    python制作命令行工具--fire 前言 本篇教程的目的是希望大家可以通读完此篇之后,可以使用python制作一款符合自己需求的linux工具. 本教程使用的是google开源的python第三方 ...

  7. python 交互式命令行数据库连接助手 -- mysql、sql server (mssql)、redis

    目录 python 交互式命令行数据库连接助手 0. 操作示例 1. python 连接mssql 2. python 连接mysql 3. python 连接redis n. Tips python ...

  8. 仿微信中加载网页时带线行进度条的WebView的实现

    finddreams:http://blog.csdn.net/finddreams/article/details/44172639 为了仿微信中加载网页时带进度条的WebView的实现,首先我们来 ...

  9. 【python】命令行解析工具argparse用法

    python的命令行参数 之前有用到optget, optparse, 现在这些都被弃用了. import argparse parser = argparse.ArgumentParser() ar ...

随机推荐

  1. 洛谷 P1031 均分纸牌

    P1031 均分纸牌 这道题告诉我们,对于实在想不出算法的题,可以大胆按照直觉用贪心,而且在考试中永远不要试着去证明贪心算法,因为非常难证,会浪费大量时间. (这就是你们都不去证的理由??) 这道题贪 ...

  2. 利用串口的硬件buf收发数据

    很多单片机的串口可以设置硬件接收和发送的buf,这样可以减少中断的次数和cpu的浪费,方法就是:发送时根据串口波特率(通讯格式N-8-1)和硬件buf缓冲的字节数计算定时器的间隔(小于1000*buf ...

  3. 用vue.js重构订单计算页面

    在很久很久以前做过一个很糟糕的订单结算页面,虽然里面各区域(收货地址)使用模块化加载,但是偶尔会遇到某个模块加载失败的问题导致订单提交的数据有误. 大致问题如下: 1. 每个模块都采用usercont ...

  4. Vuex.js状态管理共享数据 - day8

    VScode文件目录: amount.vue代码如下: <template> <div> <!-- <h3>{{ $store.state.count }}& ...

  5. hdoj薛猫猫杯程序设计网络赛1003 球球大作战

    思路: 二分,check函数不是很好写. 实现: 1. #include <bits/stdc++.h> using namespace std; typedef long long ll ...

  6. IOS之UI异步刷新

    NSOperationQueue     *operationQueue; // for rendering pages on second thread [operationQueue waitUn ...

  7. iis的网站发布

    1.打开IIS服务器,添加“新网站”,命名网站的名称.物理路径(存放index.aspx的文件路径).ip地址和端口:2.在已经添加的网站,启用“目录浏览”,“默认文档”设置将要打开的网页 注:(1) ...

  8. Grid Infrastructure 启动的五大问题 (文档 ID 1526147.1)

    适用于: Oracle Database - Enterprise Edition - 版本 11.2.0.1 和更高版本本文档所含信息适用于所有平台 用途 本文档的目的是总结可能阻止 Grid In ...

  9. 1.JOIN和UNION区别

    1.JOIN和UNION区别join 是两张表做交连后里面条件相同的部分记录产生一个记录集,union是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集 . JOIN用于按照ON条件联接两 ...

  10. 集成iAd广告

    在iPhone程序中集成广告,管他能不能赚钱,不放上一个iAd就心有不甘. 参考了下面这篇文章: http://bees4honey.com/blog/tutorial/how-to-add-iad- ...