使用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

相关内容

热门资讯

原创 审... 嘿,朋友们!今天咱来聊聊敦煌壁画里那些超级迷人的飞天形象。你瞧,当你走进敦煌莫高窟,一抬眼,就能看到...
贵州旅游3天必知道的路线攻略,... 贵州,一个充满神秘色彩与民族风情的省份,一直是我向往的旅游目的地。那里有壮观的瀑布、秀美的山水、独特...
张家界五天四晚怎么玩?张家界避... "三千奇峰,八百秀水",当我终于站在张家界国家森林公园的入口处,这句形容张家界的诗句立刻浮现在脑海。...
北京四天三晚景点+行程攻略,北... 宝子们,北京这座城市,就像是一本永远翻不完的历史巨著,每一页都写满了故事与传奇。它作为中国的首都,不...
贵州3天定制游怎么样?贵阳三日... 贵州,一个充满神秘与魅力的地方,以其独特的喀斯特地貌、丰富的民族文化以及诱人的美食而闻名遐迩。一直听...
泽普房车营地:戈壁滩上的“温馨... 夏日炎炎,泽普县房车营地凭借独特的自然风光与完善的配套服务,不仅成为游客休憩的“温馨驿站”,更成为上...
早读佛山|总部+1,“国民零食... ◆ “国民零食第一股”来了!西樵大健康剑指百亿级 ◆ 《财富》中国500强出炉,佛山占8席!佛燃能源...
原创 胡... 一、这道菜,专治没胃口 最近天气忽冷忽热,胃口也跟着起起落落。这时候,最需要的就是一锅热气腾腾的炖菜...
原创 包... 标题:包子的多样风情:探索包子的种类与制作秘籍 在中华美食的浩瀚星河中,包子以其独特的魅力熠熠生辉...
原创 它... 标题:它比牛羊肉便宜,比猪肉美味,降血压、降血脂,是进补的优良食品。 在探讨美食的世界时,我们总能...
原创 亲... 你有没有过这样的时刻,在忙碌一天后,身心俱疲,却因一顿自己亲手做的家常菜,瞬间被治愈?于我而言,这绝...
原创 把... 标题:把土豆这样做,比其它做法好吃一百倍,朋友圈晒图人人问做法! 在美食的世界里,土豆以其独特的口...
逛草原品美食 四子王羊杂美食活... 看草原美景,品地道羊杂。2025年内蒙古·四子王羊杂美食活动将于8月2日至8月7日在四子王旗格根塔拉...
原创 小... 标题:小伙摆摊卖这种蒸玉米,5块钱一个,剥开皮后才发现“内有乾坤” 在繁忙的都市生活中,美食总是能...
惠州理工学校举行李宏坤大师客座... 2025年7月21日上午,惠州理工学校嘉宾云集,气氛庄重热烈。学校隆重举行客座教授、学科带头人聘任仪...
猪肉百叶结完美搭配!这道云南烧... 云南百叶结烧肉,醇厚的肉香与百叶结的豆香相互交融,简单中透着扎实的滋味。这道菜不需要繁复的烹饪技巧,...
夏日露营,感受没有“天花板”的...   记者:达日罕、叶紫嫣  摄像:安琪、杨景义、于磊
北京旅游管家推荐,北京4天3晚... 北京,这座古老而又充满活力的城市,宛如一颗璀璨的明珠,散发着独特的魅力。它是中国的首都,是历史与现代...
北京双人四日游多少钱?四天北京... 嘿,朋友们!暑假到啦,是不是好多人都把北京列为了旅游目的地呀?北京,那可是咱中国的首都,一座有着三千...