• 技术文章 >后端开发 >Python教程

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

    王林王林2023-04-25 09:01:06转载53

    progress库安装和介绍

    1.安装progress库

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

    pip install progress

    2.progress进度条效果展示

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

    如何用Python中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()

    运行效果:

    如何用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, ShadyBar
    import time
    
    bar = 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, PixelSpinner
    
    for 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, Pie
    import time
    
    for i in Counter('Loading:').iter(range(100)):
        time.sleep(0.01)

    运行效果:

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

    汇总

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

    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库实现进度条的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:亿速云,如有侵犯,请联系admin@php.cn删除
    专题推荐:Python progress
    上一篇:Python json模块有哪些常用方法 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 使用Python和pywinauto实现自动化采集任务的步骤和方法• Python速查表大全,你掌握了哪些知识点?• Python中如何高效地实现列转行操作• python怎么使用pyshp读写shp文件• Python中异常的传递性和手动抛出异常的方法
    1/1

    PHP中文网