使用tqdm实现下载文件进度条
Posted phyger
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用tqdm实现下载文件进度条相关的知识,希望对你有一定的参考价值。
1、获取下载链接
下载链接为:http://fastsoft.onlinedown.net/down/Fcloudmusicsetup2.5.5.197764.exe
2、使用tqdm实现
- 2.1、从response的headers中获取文件大小,同时注意:get请求中#stream=True参数的作用是仅让响应头被下载,连接保持打开状态
- 2.2、以wb模式打开文件
- 2.3、使用注意调用iter_content,一块一块的遍历要下载的内容,搭配stream=True,此时才开始真正的下载
原始代码:模板
import requests from tqdm import tqdm def downloadFILE(url,name): resp = requests.get(url=url,stream=True) #stream=True的作用是仅让响应头被下载,连接保持打开状态, content_size = int(resp.headers[‘Content-Length‘])/1024 #确定整个安装包的大小 with open(name, "wb") as f: print "安装包整个大小是:",content_size,‘k,开始下载...‘ for data in tqdm(iterable=resp.iter_content(1024),total=content_size,unit=‘k‘,desc=name): #调用iter_content,一块一块的遍历要下载的内容,搭配stream=True,此时才开始真正的下载 #iterable:可迭代的进度条 total:总的迭代次数 desc:进度条的前缀 f.write(data) print name + "已经下载完毕!" if __name__ == ‘__main__‘: url = "需要下载的文件的地址" name = url.split(‘/‘)[-1] #截取整个url最后一段即文件名 downloadFILE(url,name)
优化代码:
1 from tqdm import tqdm 2 import time,requests 3 4 def downloadFILE(url,name): 5 resp = requests.get(url=url,stream=True) 6 content_size = int(resp.headers[‘Content-Length‘])/1024 7 with open(name, "wb") as f: 8 print("Pkg total size is:",content_size,‘k,start...‘) 9 for data in tqdm(iterable=resp.iter_content(1024),total=content_size,unit=‘k‘,desc=name): 10 f.write(data) 11 print(name + "download finished!") 12 if __name__ == ‘__main__‘: 13 url = "http://fastsoft.onlinedown.net/down/Fcloudmusicsetup2.5.5.197764.exe" 14 name = url.split(‘/‘)[-1] 15 downloadFILE(url,name)
效果:在jupyter中
下载的文件:
双击下载的文件:
证明下载的文件没问题!
以上是关于使用tqdm实现下载文件进度条的主要内容,如果未能解决你的问题,请参考以下文章
使用 TQDM 几乎使我的 GET 请求的文件大小增加了一倍
Python enumerate() tqdm 读取文件时的进度条?