使用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 进度条都显示在新行上?

使用 TQDM 几乎使我的 GET 请求的文件大小增加了一倍

Python enumerate() tqdm 读取文件时的进度条?

复制文件时在控制台中显示进度条。在 python 中使用 tqdm

Python进度条:tqdm

python使用tqdm实现程序运行进度条