<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
1.安裝progress庫
progress是Python第三方庫,在終端執行 pip 命令安裝。
pip install progress
2.progress進度條效果展示
progress的pypi源地址為:https://pypi.org/project/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 類的主要引數有:
大部分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進度條內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45