使用python下载大型文件的方法,显示进度条和下载时间
admin
2024-01-18 17:28:33
0

文章目录

  • requets普通方法
  • 流下载
  • 参考文献

requets普通方法

下载大型文件时,我们一般都是这样下载的

import requests
url = ""
r = requests.get(url)
with open('1.mp4', 'wb') as f:f.write(r.content)

这样下载大型文件时存在一个问题,那就是内存使用量迅速上升,可能会造成电脑卡死。所以我们需要换一个方式进行下载

流下载

我们可以使用文本流进行下载.
requests模块中有一个这样的方法Response.iter_content()
Response响应对象的一个方法

iter_content(chunk_size=1, decode_unicode=False)

在响应数据上进行重做。当stream=True设置在请求上时,这可以避免立即将内容读入内存以获得大响应。块大小是它应该读入内存的字节数。这不一定是每个返回的项目的长度,因为解码可以进行。

chunk_size必须是类型 int 或 None。值为None时会因stream的值而异。stream-True将读取数据的字块大小与接收的区块相同。如果stream=False,则数据将作为单个块返回。

如果decode_unicode设置为真,响应内容将根据使用最佳编码进行解码。

需要在get请求上设置参数stream为True,它不会立即开始下载,当使用iter_content遍历内容或访问内容属性时才开始下载。

代码实现:

url = ""
r = requests.get(url, headers=header, stream=True)
with open('1.mp4', "wb") as f:for chunk in r.iter_content(chunk_size=1024):if chunk:f.write(chunk)

加个进度条模块

# 进度条模块
def progressbar(url,path):if not os.path.exists(path):   # 看是否有该文件夹,没有则创建文件夹os.mkdir(path)start = time.time() #下载开始时间response = requests.get(url, stream=True) #stream=True必须写上size = 0    #初始化已下载大小chunk_size = 1024  # 每次下载的数据大小content_size = int(response.headers['content-length'])  # 下载文件总大小try:if response.status_code == 200:   #判断是否响应成功print('Start download,[File size]:{size:.2f} MB'.format(size = content_size / chunk_size /1024))   #开始下载,显示下载文件大小filepath = path+'\name.extension name'  #设置图片name,注:必须加上扩展名with open(filepath,'wb') as file:   #显示进度条for data in response.iter_content(chunk_size = chunk_size):file.write(data)size +=len(data)print('\r'+'[下载进度]:%s%.2f%%' % ('>'*int(size*50/ content_size), float(size / content_size * 100)) ,end=' ')end = time.time()   #下载结束时间print('Download completed!,times: %.2f秒' % (end - start))  #输出下载用时时间except:

现原理其实很简单,我们一般下载东西使用的requests.get(url).content的方法下载来的文件是二进制文件,我们只要通过for循环每次下载1024kb,到最后获取文件的总大小,即可完成我们的功能实现了!.

参考文献

  • https://blog.csdn.net/m0_46778548/article/details/121180585
  • https://blog.csdn.net/weixin_43347550/article/details/105248223

相关内容

热门资讯

新加坡旅行社行业观察|金溪旅行... 近年来,中国出境旅游市场逐渐恢复活力,新加坡作为近距离的目的地,再次成为团队旅游、企业团建和学生研学...
景区古建筑不亮灯,游客夜间不来... 当夜幕降临,你的景区古建筑群是否也陷入了黑暗?游客们白天匆匆游览后,夜晚便无处可去,只能选择离开。这...
原创 崇... 本文陈述所有内容皆有可靠信息来源,赘述在文章结尾 文| 昕昕 百年前,旧上海外滩公园门口张贴了“华...
工厂电动观光车_11座电动敞篷... 工厂电动观光车_11座电动敞篷旅游观光车高质量舒适价格便宜的文章 在现代旅游和休闲娱乐领域,交通工具...
38岁港姐在沙漠旅游,与64岁... 64岁香港富商曾文豪,从暑假开始就带着妻儿到国外度假去了,期间在南法私人庄园生活了两个多月,依然意犹...
上海208米 "飞碟... 上海人民广场附近有一栋建筑格外引人注目,其顶部独特的飞碟造型,像是一个外星飞船,与周围建筑群形成鲜明...
中医刘秋峰:阳气一升,脾胃寒湿... 中医认为,脾胃为后天之本,主运化水谷精微。若阳气不足,脾胃易受寒湿困扰,导致运化功能减弱,出现腹胀、...
原创 汪... 咱就是说,同样的价钱,你想吃明火炒菜、还是半成品加工的预制菜? 什么是老百姓心中的烟火气?噼里啪啦的...
欢聚尝鲜!进口三文鱼进社区 N... 9月12日,成都市武侯区玉林东路社区广场,一场围绕“进口三文鱼”展开的社区活动热闹非凡。居民李阿姨举...
2024年国内出游56.15亿... 在十四届全国人大常委会第十七次会议上,受国务院委托,文化和旅游部部长孙业礼作了关于推动文化和旅游深度...
新年七道餐厅待客菜,川香好吃,... 新年七道餐厅待客菜,川香味美,味道一绝,大家可以收藏起来了。 米豆腐耗儿鱼 1.把耗儿鱼宰杀干净,...
原创 喝... 在养生的道路上,补钙可是一件大事。尤其是上了年纪,或者正在长身体的小朋友,更需要充足的钙来维持骨骼健...
八款家宴私房菜,款款独特,款款... 八款家宴私房菜,款款独特,款款好吃,值得大家收藏和参考。 小米蒸排骨 1.小米淘洗干净,泡水三个小...
俗话“十人九腰疼”,6款滋补汤... 一、黄精党参乌鸡汤 二、海参黑豆汤 三、板栗核桃枸杞汤 四、牛大力杜仲猪骨汤 ...
原创 俄... 中国人对酒文化的极大热情经常令国际社会感到不解,尤其是在与俄罗斯人的酒文化对比中更显鲜明。 在俄罗斯...
原创 “... 为啥白露一过,小区王奶奶就雷打不动地熬粥、炖汤、煮甜水?明明超市里补品摆了半货架,她偏说 “白露食补...