Python如何使用Requests下载文件并且显示进度条

 更新时间:2024年12月17日 09:35:45   作者:LLLibra146  
这篇文章主要为大家详细介绍了如何使用 Requests 下载文件并且显示进度条,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

引言

本篇文章来分享一下如何使用 Requests 下载文件并且显示进度条。

下载文件

说到下载文件,大家可能一下子就能写出以下的代码:

import requests

total = 10485
url = f'https://speed.cloudflare.com/__down?during=download&bytes={total}'
# 上面的 URL 是 cloudflare 的测试链接,可以传入想要下载的长度
res = requests.get(url)

with open('test.file', 'wb') as file:
    file.write(res.content)
print('下载完成')

这样写当然没问题,但是有几个问题:

  • 文件内容都放到了内存中,并且没有下载进度
  • 如果文件很大,不光下载时间很久,而且占用很大内存无法释放,只有下载完成后才能释放
  • 没有下载进度,不知道下载是否还在进行中,不知道何时结束,不知道下载的状态

Requests 分块下载

为了解决上面的问题,我们需要用到流式传输,在使用 Requests 进行下载时,只需要将 stream 设置 True,即可开启流式传输,Requests 不会从服务器一次性将内容全部下载到本地,而是根据需求分块的从服务器获取内容,然后对内容进行处理。

举个例子:

import json
import requests

r = requests.get('https://httpbin.org/stream/20', stream=True)

for line in r.iter_lines():

    # filter out keep-alive new lines
    if line:
        decoded_line = line.decode('utf-8')
        print(json.loads(decoded_line))

给下载加上进度条

为了解决下载的时候没有进度像是卡住的问题,可以在下载的时候加上进度条, 并且分块进行下载,而不是将数据全部放到内存中,防止占用过大的内存。

进度条我们使用tqdm 库,tqdm 库是一个功能强大且极具实用性的 Python 进度条工具,它能够以直观的可视化进度条形式清晰展示循环迭代、文件处理等各类任务的执行进度,极大提升程序运行状态的可视性与用户体验,广泛应用于数据处理、机器学习训练等众多领域,方便开发者与使用者实时掌握任务进展情况并有效优化程序运行流程。

先安装:

poetry add tqdm
# 或者
pip install tqdm

安装好后,对之前的下载代码进行优化,并且使用流式传输方法改造一下:

import requests
from tqdm import tqdm

total = 104857600  # 100M
url = f'https://speed.cloudflare.com/__down?during=download&bytes={total}'
res = requests.get(url, stream=True)
# 上面的 URL 是 cloudflare 的测试链接,可以传入想要下载的长度,如果是正常的下载文件,需要通过下面的代码来获取总长度
# file_size = int(response.headers.get("Content - Length", 0))
print(total)
with open('test.file', 'wb') as file, tqdm(
        desc='test.file',
        total=total,
        unit='iB',
        unit_scale=True,
        unit_divisor=1024,
) as bar:
    for data in res.iter_content(chunk_size=1024):
        size = file.write(data)
        bar.update(size)

下载效果:

可以看到,不光有了进度条,还有了下载速度,而且还有总大小和已经下载的大小和预估时间,信息是相当全面了。

总结

上面的方法在下载大文件时非常有用,不仅可以清楚地看到下载的进度,还能避免一次性将整个文件读取到内存中,从而节省内存资源,提高程序的稳定性和效率。

到此这篇关于Python如何使用Requests下载文件并且显示进度条的文章就介绍到这了,更多相关Python Requests下载文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现的求解最大公约数算法示例

    Python实现的求解最大公约数算法示例

    这篇文章主要介绍了Python实现的求解最大公约数算法,涉及Python数学运算相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • Python Selenium 搜索和点击示例代码

    Python Selenium 搜索和点击示例代码

    使用Python Selenium实现Google搜索与点击,需安装库及浏览器驱动,通过显式等待确保结果加载,支持精准/随机点击,处理元素遮挡及广告过滤,本文给大家介绍Python Selenium 搜索和点击,感兴趣的朋友一起看看吧
    2025-06-06
  • python基于python-docx库自动化处理Word文档的完整指南

    python基于python-docx库自动化处理Word文档的完整指南

    python-docx是一款纯Python实现的第三方库,专门用于创建和修改Microsoft Word的.docx格式文档,下面我们就来看看如何使用python-docx库自动化处理Word文档吧
    2026-01-01
  • 利用Python求阴影部分的面积实例代码

    利用Python求阴影部分的面积实例代码

    这篇文章主要给大家介绍了关于利用Python求阴影部分面积的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Python网络编程详解(常用库、代码案例、环境搭建等)

    Python网络编程详解(常用库、代码案例、环境搭建等)

    网络编程是Python中非常重要的一个领域,涉及到的常用库包括socket、asyncio、http、requests、websockets等,下面我们将从常用库、库的详细用法、完整代码案例、依赖项、环境搭建、注意事项和常见问题等方面,对Python网络编程进行详细讲解,需要的朋友可以参考下
    2025-03-03
  • python如何实现单链表的反转

    python如何实现单链表的反转

    这篇文章主要介绍了python如何实现单链表的反转,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 关于Python的异常捕获和处理

    关于Python的异常捕获和处理

    程序在运行过程当中,不可避免的会出现一些错误,比如:使用了没有赋值过的变量,使用了不存在的索引,一个数字除以0,这些错误在程序中,我们称其为异常,那么如何处理这些异常呢,今天我们就来看一看
    2023-04-04
  • 简单的python后台管理程序

    简单的python后台管理程序

    这篇文章主要为大家详细介绍了简单python后台管理程序的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 已安装tensorflow-gpu,但keras无法使用GPU加速的解决

    已安装tensorflow-gpu,但keras无法使用GPU加速的解决

    今天小编就为大家分享一篇已安装tensorflow-gpu,但keras无法使用GPU加速的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python利用手势识别实现贪吃蛇游戏

    Python利用手势识别实现贪吃蛇游戏

    想必大家都玩过贪吃蛇的游戏吧:通过操纵蛇的移动方向能够让蛇吃到随机出现的食物,吃到的食物越多,蛇就会变得越长。本文将使用手势识别来完成贪吃蛇这个简单的游戏,感兴趣的可以了解一下
    2022-04-04

最新评论