一文教你用Python中progress库实现进度条

目录
  • progress库安装和介绍
  • progress实现进度条
  • PyCharm进度条显示问题解决
  • 进度条代码的另外两种写法
  • 实现更多种类的进度条
  • 汇总

progress库安装和介绍

1.安装progress库

progress是Python第三方库,在终端执行 pip 命令安装。

pip install progress

2.progress进度条效果展示

progress的pypi源地址为:https://pypi.org/project/progress/

在官网可以看到progress能实现的各种进度条效果,如下动图。

progress实现进度条

# coding=utf-8
from progress.bar import Bar
import time

# 创建Bar类的实例
bar = Bar('MyProcess:', max=100)
# 循环处理某业务,调用bar对象的next()方法,循环次数等于max
for _ in range(100):
	# Do some work
    time.sleep(0.05)
    bar.next()
# 循环完成后调用finish()方法
bar.finish()

运行效果:

使用 progress 库实现进度条很简单,从 progress 库的 bar.py 中导入 Bar 类,实例化一个对象,然后循环处理业务和调用 next() 方法,处理完成后调用 finish() 方法结束进度条。

Bar 类的主要参数有:

  • message: 进度条显示的信息,这个参数默认可以用位置参数传给 Bar 。
  • width: 修改进度条的宽度,默认32。
  • max: 进度条被分成几等份,如100。
  • suffix: 进度百分比显示的格式,默认 ‘%(index)d/%(max)d’ 。
  • fill: 进度条用什么填充,默认’#’ 。
  • empty_fill: 未加载的进度条用什么填充,默认空格’ ’ 。
  • bar_prefix: 进度条前缀,默认’ |’ 。
  • bar_suffix: 进度条后缀,默认’| ’ 。
  • color: 进度条的颜色,默认None。

PyCharm进度条显示问题解决

大部分Python程序员都使用PyCharm,如果在PyCharm中运行进度条代码后没有显示进度条效果,可以按照如下步骤设置,再重新运行代码。

Step1. 点击PyCharm上方的 Run 按钮,然后点击 Edit Configurations,进入运行配置页面。

Step2. 将 Emulate terminal in output console 选项打钩,然后重新运行代码。

细心的小伙伴应该发现了,上面的进度条代码在PyCharm中运行完成后,进度条下有一串奇怪的字符: ‘?[?25h’ ,在终端中用脚本方式 python progress_demo.py 运行相同的代码,不会有这串符号。

这串字符表示的是光标,在PyCharm中运行完成后,光标被输出在控制台上了。解决方法为:按住 Ctrl 键,点击导入的 Bar 类名,跳转到源码 bar.py 中,再按住 Ctrl 键点击 Bar 类继承的 Progress 类,进入 progress 库的 __init__.py 文件中,将该文件中的 SHOW_CURSOR 变量改为空字符串。

修改源码后再重新运行代码,光标不显示了,那一串字符也就不显示了。

在PyChram中运行进度条,还可能会遇到其他显示问题,建议出现问题时,用脚本的方式运行,以脚本运行的结果为准,PyChram中运行只用来调试代码。

进度条代码的另外两种写法

1. 上下文管理器: 使用 with … as … 上下文管理器的方式编写进度条,进度条完成后无需调用 finish() 方法。

with Bar('Processing', max=20) as bar:
    for i in range(20):
        time.sleep(0.05)
        bar.next()

2. 使用 iter() 方法: 使用 iter() 方法可以简化迭代器的工作,不需要调用 next() 方法。

for i in Bar('Processing').iter(range(100)):
    time.sleep(0.05)

这两种实现方式执行的结果与最开始的实现方式一样。

实现更多种类的进度条

1. Bar 系列

前文中点进了progress的源码,可以看到 Bar 类继承自 Progress 类,Progress 类继承自 Infinite 类,Progress 类和 Infinite 类实现了进度条的基本功能。

在 bar.py 中,除了 Bar 类,还有6个类,ChargingBar, FillingSquaresBar, FillingCirclesBar, IncrementalBar, PixelBar, ShadyBar,它们分别是 Bar 类的子类或孙类,继承了进度条的功能,在每一个类中只是修改了 suffix, fill, empty_fill, bar_prefix, bar_suffix这些变量的值,修改了进度条的样式。

使用很简单,只需要导入这些类,将上面代码中的 Bar 换成这些类就行了,如 FillingSquaresBar。

from progress.bar import Bar, ChargingBar, FillingSquaresBar, FillingCirclesBar, IncrementalBar, PixelBar, ShadyBar
import time

bar = FillingSquaresBar('MyProcess:', max=100)
for i in range(100):
    time.sleep(0.05)
    bar.next()
bar.finish()

运行效果:

还可以自己修改上面的参数,设置个性化的进度条,本文暂不扩展,以后有空可以专门写文章介绍。

2. Spinner 系列

progress 库的 spinner.py 中实现了 5 个类,Spinner, PieSpinner, MoonSpinner, LineSpinner, PixelSpinner。

from progress.spinner import Spinner, PieSpinner, MoonSpinner, LineSpinner, PixelSpinner

for i in Spinner('MySpinner:').iter(range(100)):
    time.sleep(0.01)

运行效果:

3.Counter 系列

progress 库的 counter.py 中实现了 4 个类,Counter, Countdown, Stack, Pie。

from progress.counter import Counter, Countdown, Stack, Pie
import time

for i in Counter('Loading:').iter(range(100)):
    time.sleep(0.01)

运行效果:

汇总

接下来将上面介绍的所有种类的进度条全部放到一起,代码如下:

from progress.bar import Bar, ChargingBar, FillingSquaresBar, \
    FillingCirclesBar, IncrementalBar, PixelBar, ShadyBar
from progress.spinner import Spinner, PieSpinner, MoonSpinner, LineSpinner, PixelSpinner
from progress.counter import Counter, Countdown, Stack, Pie
import time
import random

progess_list = [Bar, ChargingBar, FillingSquaresBar, FillingCirclesBar, IncrementalBar,
                PixelBar, ShadyBar, Spinner, PieSpinner, MoonSpinner, LineSpinner,
                PixelSpinner, Counter, Countdown, Stack, Pie]
for P in progess_list:
    for i in P(P.__name__ + ':').iter(range(100)):
        time.sleep(0.01)

bar = IncrementalBar('Random:', suffix='%(index)d%%')
for i in range(100):
    bar.goto(random.randint(0, 100))
    time.sleep(0.01)
bar.finish()

运行效果:

运行代码后可以得出所有种类的进度条,与文章开头从官网截的图效果相同。

到此这篇关于一文教你用Python中progress库实现进度条的文章就介绍到这了,更多相关Python progress进度条内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python tkinter进度条控件(Progressbar)的使用

    进度条的作用就是提示用户进度信息.可以有两种方式: 1)提示完成度 比如,正在安装程序的进度,一般是从0%到100%. 2)提示正在进行处理 比如正在处理数据内容,并不知道何时能够处理完毕.这个时候的进度是提示用户有任务正在进行.此类的提示没有完成度提示,只是进度条来回往复的移动,表示任务正在进行中. 进度条对象是定义在ttk中的,使用的时候需要引入ttk包. 1 属性 属性 描述 cursor 鼠标位于进度条内时的形状 length 进度条长度 maximum 进度条最大刻度值 mode 进度

  • Python使用progressbar模块实现的显示进度条功能

    本文实例讲述了Python使用progressbar模块实现的显示进度条功能.分享给大家供大家参考,具体如下: progressbar安装: pip install progressbar 用法一 # -*- coding=utf-8 -*- import time from progressbar import * total = 1000 def dosomework(): time.sleep(0.01) progress = ProgressBar() for i in progress

  • 6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)

    在项目开发过程中加载.启动.下载项目难免会用到进度条,如何使用Python实现进度条呢? 这里为小伙伴们分享四种Python实现进度条的库:Progress库.tqdm库.alive-progress库和PySimpleGUI库,其中前三个是文本进度条库,最后一个是可以在GUI上运行的进度条. 1.Progress库 Progress是一种文本进度条库,库详细说明参加GitHub. 使用库之前需要进行安装,pip指令如下所示: pip install progressbar2 实现总耗时1S的进

  • 一文教你用Python中progress库实现进度条

    目录 progress库安装和介绍 progress实现进度条 PyCharm进度条显示问题解决 进度条代码的另外两种写法 实现更多种类的进度条 汇总 progress库安装和介绍 1.安装progress库 progress是Python第三方库,在终端执行 pip 命令安装. pip install progress 2.progress进度条效果展示 progress的pypi源地址为:https://pypi.org/project/progress/ 在官网可以看到progress能实

  • 详解Python中如何写控制台进度条的整理

    本文实例讲述了Python显示进度条的方法,是Python程序设计中非常实用的技巧.分享给大家供大家参考.具体方法如下: 首先,进度条和一般的print区别在哪里呢? 答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过stdout输出的东西依旧保留,而且保证我们在下面看到最新的输出结果. 进度条不然,我们必须再原地输出才能保证他是一个进度条,否则换行了怎么还叫进度条? 最简单的办法就是,再输出完毕后,把光标移动到行首,继续在那里输出更长的进度条即可

  • python中requests库session对象的妙用详解

    在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息. 妙用1 requests库的session对象能够帮我们跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookies. 举个栗子,跨请求保持cookies,在命令行上输入下面命令: # 创建一个session对象 s = requests.Session() # 用session对象发出get请求,设置cookies s.get('http://ht

  • python中pycurl库的用法实例

    本文实例讲述了python中pycurl库的用法,分享给大家供大家参考. 该实例代码实现从指定网址读取网页,主要是pycurl库的使用. 具体实现方法如下: #定义一个类 class CallBack: """ for pycurl """ def __init__(self): """Constructor""" self.data = "" def func(se

  • Python中optparser库用法实例详解

    本文研究的主要是Python中optparser库的相关内容,具体如下. 一直以来对optparser不是特别的理解,今天就狠下心,静下心研究了一下这个库.当然了,不敢说理解的很到位,但是足以应付正常的使用了.废话不多说,开始今天的分享吧. 简介 optparse模块主要用来为脚本传递命令参数功能. 引入 在IDE中引入optparser是很方便的. from optparser import OptionParser 初始化 相对而言,初始化需要我们多注意一点点了. 因为我们有两种不同的方式来

  • 对Python中gensim库word2vec的使用详解

    pip install gensim安装好库后,即可导入使用: 1.训练模型定义 from gensim.models import Word2Vec model = Word2Vec(sentences, sg=1, size=100, window=5, min_count=5, negative=3, sample=0.001, hs=1, workers=4) 参数解释: 1.sg=1是skip-gram算法,对低频词敏感:默认sg=0为CBOW算法. 2.size是输出词向量的维数,值

  • Python 中Pickle库的使用详解

    在"通过简单示例来理解什么是机器学习"这篇文章里提到了pickle库的使用,本文来做进一步的阐述. 那么为什么需要序列化和反序列化这一操作呢? 1.便于存储.序列化过程将文本信息转变为二进制数据流.这样就信息就容易存储在硬盘之中,当需要读取文件的时候,从硬盘中读取数据,然后再将其反序列化便可以得到原始的数据.在Python程序运行中得到了一些字符串.列表.字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据.python模块大全中的Pickle模块就派

  • 详解python中docx库的安装过程

    python中docx库的简介 python-docx包,这是一个很强大的包,可以用来创建docx文档,包含段落.分页符.表格.图片.标题.样式等几乎所有的word文档中能常用的功能都包含了,这个包的主要功能便是用来创建文档,相对来说用来修改功能不是很强大.一般情况下在Anaconda中不自带,需另行下载. 导入docx的方法 我的实现方法是通过pip工具在线下载:首先打开cmd命令窗口,然后输入pip install python-docx,然后回车静等.最后命令行中出现Successfull

  • 详解Python中pyautogui库的最全使用方法

    在使用Python做脚本的话,有两个库可以使用,一个为PyUserInput库,另一个为pyautogui库.就本人而言,我更喜欢使用pyautogui库,该库功能多,使用便利.下面给大家介绍一下pyautogui库的使用方法.在cmd命令框中输入pip3 install pyautogui即可安装该库! 常用操作 我们在pyautogui库中常常使用的方法,如下: import pyautogui pyautogui.PAUSE = 1 # 调用在执行动作后暂停的秒数,只能在执行一些pyaut

  • python中sympy库求常微分方程的用法

    问题1: 程序,如下 from sympy import * f = symbols('f', cls=Function) x = symbols('x') eq = Eq(f(x).diff(x, x) - 2*f(x).diff(x) + f(x), sin(x)) print(dsolve(eq, f(x))) 结果 Eq(f(x), (C1 + C2*x)*exp(x) + cos(x)/2) 附:布置考试中两题 1.利用python的Sympy库求解微分方程的解 y=f(x),并尝试利

随机推荐