您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何用Python中progress庫實(shí)現(xiàn)進(jìn)度條”,在日常操作中,相信很多人在如何用Python中progress庫實(shí)現(xiàn)進(jìn)度條問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何用Python中progress庫實(shí)現(xiàn)進(jìn)度條”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
1.安裝progress庫
progress是Python第三方庫,在終端執(zhí)行 pip 命令安裝。
pip install progress
2.progress進(jìn)度條效果展示
在官網(wǎng)可以看到progress能實(shí)現(xiàn)的各種進(jìn)度條效果,如下動圖。
# coding=utf-8 from progress.bar import Bar import time # 創(chuàng)建Bar類的實(shí)例 bar = Bar('MyProcess:', max=100) # 循環(huán)處理某業(yè)務(wù),調(diào)用bar對象的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 庫實(shí)現(xiàn)進(jìn)度條很簡單,從 progress 庫的 bar.py 中導(dǎo)入 Bar 類,實(shí)例化一個對象,然后循環(huán)處理業(yè)務(wù)和調(diào)用 next() 方法,處理完成后調(diào)用 finish() 方法結(jié)束進(jìn)度條。
Bar 類的主要參數(shù)有:
message: 進(jìn)度條顯示的信息,這個參數(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。
大部分Python程序員都使用PyCharm,如果在PyCharm中運(yùn)行進(jìn)度條代碼后沒有顯示進(jìn)度條效果,可以按照如下步驟設(shè)置,再重新運(yùn)行代碼。
Step1. 點(diǎn)擊PyCharm上方的 Run 按鈕,然后點(diǎn)擊 Edit Configurations,進(jìn)入運(yùn)行配置頁面。
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)行相同的代碼,不會有這串符號。
這串字符表示的是光標(biāo),在PyCharm中運(yùn)行完成后,光標(biāo)被輸出在控制臺上了。解決方法為:按住 Ctrl 鍵,點(diǎn)擊導(dǎo)入的 Bar 類名,跳轉(zhuǎn)到源碼 bar.py 中,再按住 Ctrl 鍵點(diǎn)擊 Bar 類繼承的 Progress 類,進(jìn)入 progress 庫的 __init__.py 文件中,將該文件中的 SHOW_CURSOR 變量改為空字符串。
修改源碼后再重新運(yùn)行代碼,光標(biāo)不顯示了,那一串字符也就不顯示了。
在PyChram中運(yùn)行進(jìn)度條,還可能會遇到其他顯示問題,建議出現(xiàn)問題時,用腳本的方式運(yùn)行,以腳本運(yùn)行的結(jié)果為準(zhǔn),PyChram中運(yùn)行只用來調(diào)試代碼。
1. 上下文管理器: 使用 with … as … 上下文管理器的方式編寫進(jìn)度條,進(jìn)度條完成后無需調(diào)用 finish() 方法。
with Bar('Processing', max=20) as bar: for i in range(20): time.sleep(0.05) bar.next()
2. 使用 iter() 方法: 使用 iter() 方法可以簡化迭代器的工作,不需要調(diào)用 next() 方法。
for i in Bar('Processing').iter(range(100)): time.sleep(0.05)
這兩種實(shí)現(xiàn)方式執(zhí)行的結(jié)果與最開始的實(shí)現(xiàn)方式一樣。
1. Bar 系列
前文中點(diǎn)進(jìn)了progress的源碼,可以看到 Bar 類繼承自 Progress 類,Progress 類繼承自 Infinite 類,Progress 類和 Infinite 類實(shí)現(xiàn)了進(jìn)度條的基本功能。
在 bar.py 中,除了 Bar 類,還有6個類,ChargingBar, FillingSquaresBar, FillingCirclesBar, IncrementalBar, PixelBar, ShadyBar,它們分別是 Bar 類的子類或?qū)O類,繼承了進(jìn)度條的功能,在每一個類中只是修改了 suffix, fill, empty_fill, bar_prefix, bar_suffix這些變量的值,修改了進(jìn)度條的樣式。
使用很簡單,只需要導(dǎo)入這些類,將上面代碼中的 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()
運(yùn)行效果:
還可以自己修改上面的參數(shù),設(shè)置個性化的進(jìn)度條,本文暫不擴(kuò)展,以后有空可以專門寫文章介紹。
2. Spinner 系列
progress 庫的 spinner.py 中實(shí)現(xiàn)了 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)
運(yùn)行效果:
3.Counter 系列
progress 庫的 counter.py 中實(shí)現(xiàn)了 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)
運(yùn)行效果:
接下來將上面介紹的所有種類的進(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)行代碼后可以得出所有種類的進(jìn)度條,與文章開頭從官網(wǎng)截的圖效果相同。
到此,關(guān)于“如何用Python中progress庫實(shí)現(xiàn)進(jìn)度條”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。