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和pygame绘制繁花曲线的方法

    使用python和pygame绘制繁花曲线的方法

    本篇文章主要介绍了使用python和pygame绘制繁花曲线的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 深入解析Python中BeautifulSoup4的基础知识与实战应用

    深入解析Python中BeautifulSoup4的基础知识与实战应用

    BeautifulSoup4正是一款功能强大的解析器,能够轻松解析HTML和XML文档,本文将介绍BeautifulSoup4的基础知识,并通过实际代码示例进行演示,感兴趣的可以了解下
    2024-02-02
  • python django 访问静态文件出现404或500错误

    python django 访问静态文件出现404或500错误

    这篇文章主要介绍了python django 访问静态文件出现404或500错误的相关资料,需要的朋友可以参考下
    2017-01-01
  • 解决python web项目意外关闭,但占用端口的问题

    解决python web项目意外关闭,但占用端口的问题

    今天小编就为大家分享一篇解决python web项目意外关闭,但占用端口的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 分享2个方便调试Python代码的实用工具

    分享2个方便调试Python代码的实用工具

    这篇文章主要介绍了分享方便调试Python代码的2个实用工具,可以方便展示我们调试代码的中间状态,提升大家的编码效率,详细的介绍需要的小伙伴可以参考一下下面文章内容
    2022-05-05
  • Python的加密模块之hashlib 与 base64详解及常用加密方法

    Python的加密模块之hashlib 与 base64详解及常用加密方法

    我们来学习一下 Python 中的加密模块,加密模块在工作中被广泛应用,比如数据的传入 不希望被捕获,通过把数据加密。这样即使被捕获也无法获取到数据的真实信息,今天我们就来学习一下关于加密的方法,感兴趣的朋友跟随小编一起看看吧
    2023-02-02
  • 基于Pytorch SSD模型分析

    基于Pytorch SSD模型分析

    今天小编就为大家分享一篇基于Pytorch SSD模型分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python利用魔法方法玩转对象

    Python利用魔法方法玩转对象

    Python中魔法方法(magic method)其实就是那些被双下划线包围的方法,这些魔法方法为类添加了**“魔力”,让我们可以在面向对象编程中用更加简洁的代码来操作对象,下面我们就来具体了解一下如何利用魔法方法玩转对象吧
    2023-12-12
  • Python 生成多行重复数据的方法实现

    Python 生成多行重复数据的方法实现

    本文主要介绍了Python 生成多行重复数据的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • python实现两个字典合并,两个list合并

    python实现两个字典合并,两个list合并

    今天小编就为大家分享一篇python实现两个字典合并,两个list合并,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12

最新评论