之前我們實現進度條展示使用的自己寫的方法,且每次都是打印一行新的字符串顯示當前進度。如何更加優美的展示進度條,成爲我的新目標。應該有很多人和我有一樣的想法,果然progressbar2就是一個很好第三方庫解決這一需求。記住是progressbar2,不是progressbar。
直接上代碼展示我們藉助第三方庫progressbar2實現的代碼優化。當然依舊是在原來下載視頻的方法上進行完善。註釋在代碼中
import progressbar
def download_file(url, path):
'''
下載視頻
:param url: 視頻地址
:param path: 保存路徑
'''
with requests.get(url, stream=True) as r:
chunk_size = 1024
content_size = float(r.headers[ 'content-length' ])
print '下載開始'
# 進度條樣式
widgets = [
'下載: ', progressbar.Percentage(), # 進度條標題
' ', progressbar.Bar(marker='>', left='[', right=']', fill=' '), # 進度條填充、邊緣字符
' ', progressbar.Timer(), # 已用的時間
' ', progressbar.ETA(), # 剩餘時間
' ', progressbar.FileTransferSpeed(),# 下載速度
]
bar = progressbar.ProgressBar(widgets=widgets, max_value=content_size) # 實例化對象
with open(path, "wb") as f:
loaded = 0
bar.start() # 調用進度條start方法,在調用update方法
for chunk in r.iter_content(chunk_size=chunk_size):
loaded += len(chunk)
bar.update(loaded) # 更新進度條狀態
f.write(chunk)
bar.finish() # 結束進度條
print '下載結束'
實現的效果:
完美!