文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何用Python中progress库实现进度条

2023-07-05 16:19

关注

这篇文章主要介绍“如何用Python中progress库实现进度条”,在日常操作中,相信很多人在如何用Python中progress库实现进度条问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用Python中progress库实现进度条”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

progress库安装和介绍

安装progress库

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

pip install progress

progress进度条效果展示

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

如何用Python中progress库实现进度条

progress实现进度条

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

运行效果:

如何用Python中progress库实现进度条

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

Bar 类的主要参数有:

PyCharm进度条显示问题解决

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

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

如何用Python中progress库实现进度条

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

如何用Python中progress库实现进度条

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

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

如何用Python中progress库实现进度条

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

如何用Python中progress库实现进度条

在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, ShadyBarimport timebar = FillingSquaresBar('MyProcess:', max=100)for i in range(100):    time.sleep(0.05)    bar.next()bar.finish()

运行效果:

如何用Python中progress库实现进度条

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

2. Spinner 系列

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

from progress.spinner import Spinner, PieSpinner, MoonSpinner, LineSpinner, PixelSpinnerfor i in Spinner('MySpinner:').iter(range(100)):    time.sleep(0.01)

运行效果:

如何用Python中progress库实现进度条

3.Counter 系列

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

from progress.counter import Counter, Countdown, Stack, Pieimport timefor i in Counter('Loading:').iter(range(100)):    time.sleep(0.01)

运行效果:

如何用Python中progress库实现进度条

汇总

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

from progress.bar import Bar, ChargingBar, FillingSquaresBar, \    FillingCirclesBar, IncrementalBar, PixelBar, ShadyBarfrom progress.spinner import Spinner, PieSpinner, MoonSpinner, LineSpinner, PixelSpinnerfrom progress.counter import Counter, Countdown, Stack, Pieimport timeimport randomprogess_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库实现进度条”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯