一文教你用Python中progress庫(kù)實(shí)現(xiàn)進(jìn)度條
progress庫(kù)安裝和介紹
1.安裝progress庫(kù)
progress是Python第三方庫(kù),在終端執(zhí)行 pip 命令安裝。
pip install progress
2.progress進(jìn)度條效果展示
progress的pypi源地址為:https://pypi.org/project/progress/
在官網(wǎng)可以看到progress能實(shí)現(xiàn)的各種進(jìn)度條效果,如下動(dòng)圖。

progress實(shí)現(xiàn)進(jìn)度條
# coding=utf-8
from progress.bar import Bar
import time
# 創(chuàng)建Bar類(lèi)的實(shí)例
bar = Bar('MyProcess:', max=100)
# 循環(huán)處理某業(yè)務(wù),調(diào)用bar對(duì)象的next()方法,循環(huán)次數(shù)等于max
for _ in range(100):
# Do some work
time.sleep(0.05)
bar.next()
# 循環(huán)完成后調(diào)用finish()方法
bar.finish()
運(yùn)行效果:

使用 progress 庫(kù)實(shí)現(xiàn)進(jìn)度條很簡(jiǎn)單,從 progress 庫(kù)的 bar.py 中導(dǎo)入 Bar 類(lèi),實(shí)例化一個(gè)對(duì)象,然后循環(huán)處理業(yè)務(wù)和調(diào)用 next() 方法,處理完成后調(diào)用 finish() 方法結(jié)束進(jìn)度條。
Bar 類(lèi)的主要參數(shù)有:
- message: 進(jìn)度條顯示的信息,這個(gè)參數(shù)默認(rèn)可以用位置參數(shù)傳給 Bar 。
- width: 修改進(jìn)度條的寬度,默認(rèn)32。
- max: 進(jìn)度條被分成幾等份,如100。
- suffix: 進(jìn)度百分比顯示的格式,默認(rèn) ‘%(index)d/%(max)d’ 。
- fill: 進(jìn)度條用什么填充,默認(rèn)’#’ 。
- empty_fill: 未加載的進(jìn)度條用什么填充,默認(rèn)空格’ ’ 。
- bar_prefix: 進(jìn)度條前綴,默認(rèn)’ |’ 。
- bar_suffix: 進(jìn)度條后綴,默認(rèn)’| ’ 。
- color: 進(jìn)度條的顏色,默認(rèn)None。
PyCharm進(jìn)度條顯示問(wèn)題解決
大部分Python程序員都使用PyCharm,如果在PyCharm中運(yùn)行進(jìn)度條代碼后沒(méi)有顯示進(jìn)度條效果,可以按照如下步驟設(shè)置,再重新運(yùn)行代碼。
Step1. 點(diǎn)擊PyCharm上方的 Run 按鈕,然后點(diǎn)擊 Edit Configurations,進(jìn)入運(yùn)行配置頁(yè)面。

Step2. 將 Emulate terminal in output console 選項(xiàng)打鉤,然后重新運(yùn)行代碼。

細(xì)心的小伙伴應(yīng)該發(fā)現(xiàn)了,上面的進(jìn)度條代碼在PyCharm中運(yùn)行完成后,進(jìn)度條下有一串奇怪的字符: ‘?[?25h’ ,在終端中用腳本方式 python progress_demo.py 運(yùn)行相同的代碼,不會(huì)有這串符號(hào)。
這串字符表示的是光標(biāo),在PyCharm中運(yùn)行完成后,光標(biāo)被輸出在控制臺(tái)上了。解決方法為:按住 Ctrl 鍵,點(diǎn)擊導(dǎo)入的 Bar 類(lèi)名,跳轉(zhuǎn)到源碼 bar.py 中,再按住 Ctrl 鍵點(diǎn)擊 Bar 類(lèi)繼承的 Progress 類(lèi),進(jìn)入 progress 庫(kù)的 __init__.py 文件中,將該文件中的 SHOW_CURSOR 變量改為空字符串。

修改源碼后再重新運(yùn)行代碼,光標(biāo)不顯示了,那一串字符也就不顯示了。

在PyChram中運(yùn)行進(jìn)度條,還可能會(huì)遇到其他顯示問(wèn)題,建議出現(xiàn)問(wèn)題時(shí),用腳本的方式運(yùn)行,以腳本運(yùn)行的結(jié)果為準(zhǔn),PyChram中運(yùn)行只用來(lái)調(diào)試代碼。
進(jìn)度條代碼的另外兩種寫(xiě)法
1. 上下文管理器: 使用 with … as … 上下文管理器的方式編寫(xiě)進(jìn)度條,進(jìn)度條完成后無(wú)需調(diào)用 finish() 方法。
with Bar('Processing', max=20) as bar:
for i in range(20):
time.sleep(0.05)
bar.next()
2. 使用 iter() 方法: 使用 iter() 方法可以簡(jiǎn)化迭代器的工作,不需要調(diào)用 next() 方法。
for i in Bar('Processing').iter(range(100)):
time.sleep(0.05)
這兩種實(shí)現(xiàn)方式執(zhí)行的結(jié)果與最開(kāi)始的實(shí)現(xiàn)方式一樣。
實(shí)現(xiàn)更多種類(lèi)的進(jìn)度條
1. Bar 系列
前文中點(diǎn)進(jìn)了progress的源碼,可以看到 Bar 類(lèi)繼承自 Progress 類(lèi),Progress 類(lèi)繼承自 Infinite 類(lèi),Progress 類(lèi)和 Infinite 類(lèi)實(shí)現(xiàn)了進(jìn)度條的基本功能。
在 bar.py 中,除了 Bar 類(lèi),還有6個(gè)類(lèi),ChargingBar, FillingSquaresBar, FillingCirclesBar, IncrementalBar, PixelBar, ShadyBar,它們分別是 Bar 類(lèi)的子類(lèi)或?qū)O類(lèi),繼承了進(jìn)度條的功能,在每一個(gè)類(lèi)中只是修改了 suffix, fill, empty_fill, bar_prefix, bar_suffix這些變量的值,修改了進(jìn)度條的樣式。
使用很簡(jiǎn)單,只需要導(dǎo)入這些類(lèi),將上面代碼中的 Bar 換成這些類(lèi)就行了,如 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()
運(yùn)行效果:

還可以自己修改上面的參數(shù),設(shè)置個(gè)性化的進(jìn)度條,本文暫不擴(kuò)展,以后有空可以專(zhuān)門(mén)寫(xiě)文章介紹。
2. Spinner 系列
progress 庫(kù)的 spinner.py 中實(shí)現(xiàn)了 5 個(gè)類(lèi),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)
運(yùn)行效果:

3.Counter 系列
progress 庫(kù)的 counter.py 中實(shí)現(xiàn)了 4 個(gè)類(lèi),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)
運(yùn)行效果:

匯總
接下來(lái)將上面介紹的所有種類(lèi)的進(jìn)度條全部放到一起,代碼如下:
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()
運(yùn)行效果:

運(yùn)行代碼后可以得出所有種類(lèi)的進(jìn)度條,與文章開(kāi)頭從官網(wǎng)截的圖效果相同。
到此這篇關(guān)于一文教你用Python中progress庫(kù)實(shí)現(xiàn)進(jìn)度條的文章就介紹到這了,更多相關(guān)Python progress進(jìn)度條內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決mnist數(shù)據(jù)集下載的相關(guān)問(wèn)題
這篇文章主要介紹了解決mnist數(shù)據(jù)集下載的相關(guān)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
python求解數(shù)組中兩個(gè)字符串的最小距離
這篇文章主要為大家詳細(xì)介紹了python求解數(shù)組中兩個(gè)字符串的最小距離,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
pytest allure添加環(huán)境信息實(shí)例講解
這篇文章主要介紹了pytest allure添加環(huán)境信息實(shí)例,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12
pytorch torchvision.ImageFolder的用法介紹
今天小編就為大家分享一篇pytorch torchvision.ImageFolder的用法介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
Python中py文件轉(zhuǎn)換成exe可執(zhí)行文件的方法
這篇文章主要介紹了Python中py文件轉(zhuǎn)換成exe可執(zhí)行文件的方法,需要的朋友可以參考下2019-06-06
python基礎(chǔ)入門(mén)之普通操作與函數(shù)(三)
這篇文章主要介紹了python基礎(chǔ)入門(mén)之普通操作與函數(shù)2021-06-06
解讀python正則表達(dá)式括號(hào)問(wèn)題
這篇文章主要介紹了python正則表達(dá)式括號(hào)問(wèn)題解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
python interpret庫(kù)訓(xùn)練模型助力機(jī)器學(xué)習(xí)
這篇文章主要為大家介紹了python interpret庫(kù)訓(xùn)練模型功能特性,為你的機(jī)器學(xué)習(xí)提供便捷的路徑,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
使用python加密主機(jī)文件幾種方法實(shí)現(xiàn)
本文主要介紹了使用python加密主機(jī)文件幾種方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

