Python展示文件下载进度条

目录
  • 1、前言
  • 2、requests
  • 3、思考

1、前言

大家在用Python写一些小程序的时候,经常都会用到文件下载,对于一些较小的文件,大家可能不太在乎文件的下载进度,因为一会就下载完毕了。

但是当文件较大,比如下载chromedriver的时候,我们如果能够看到下载的进度条,那该多么友好。毕竟在npm,pip安装包的时候都有类似的进度条。

那笔者今天就给大家分享一个展示文件下载进度条的方法。

2、requests

requests库相信大家都用过,做接口测试少不了它。其实我们平时下载文件,也可以用requests做到的,比如有这样一个地址:https://autoupdate.termius.com/windows/Termius.exe

我们要下载它,应该怎么做呢?

这里来写一下伪代码,非常好懂。

# 第一步: 访问这个链接
import requests

r = requests.get("https://autoupdate.termius.com/windows/Termius.exe")

# 第二步: 获取返回的文件内容,并写到本地

with open(r"./termius.exe", "wb") as f:
    f.write(r.content)

由于我这个文件很大,所以过程很漫长,我这边就不展示具体细节了。大家可以找个几M的小文件试试。放上最终结果:

可以看到,执行完毕,文件也获取到了

3、思考

有没有觉得,这样下载文件很单调,我也不知道进度,比如下载了多少了,特别是针对大一点的文件,一直这样等着我以为他断开连接了呢。

如果咱们能在下载文件的时候,显示出进度条该多好,比如迅雷/百度网盘那样子的。

只需要安装一个库即可
要做到这些,我们只需要安装tqdm库就行了。

pip install tqdm

下面是带注释的示例代码:

import requests
from tqdm import tqdm

def download(url: str, fname: str):
    # 用流stream的方式获取url的数据
    resp = requests.get(url, stream=True)
    # 拿到文件的长度,并把total初始化为0
    total = int(resp.headers.get('content-length', 0))
    # 打开当前目录的fname文件(名字你来传入)
    # 初始化tqdm,传入总数,文件名等数据,接着就是写入,更新等操作了
    with open(fname, 'wb') as file, tqdm(
        desc=fname,
        total=total,
        unit='iB',
        unit_scale=True,
        unit_divisor=1024,
    ) as bar:
        for data in resp.iter_content(chunk_size=1024):
            size = file.write(data)
            bar.update(size)

if __name__ == "__main__":
    # 下载文件,并传入文件名
    url = "https://autoupdate.termius.com/windows/Termius.exe"
    download("https://autoupdate.termius.com/windows/Termius.exe", "haha.exe")

代码比较简单,tqdm的内容基本都是固定写法,大家不用疑惑,注意好requests等自己熟悉的部分就好。

我们来看看gif效果图,是不是狂炫酷霸吊炸天(别好奇我的cmd为何这么帅气,我是不会告诉你滴,除非你点赞):

到此这篇关于Python展示文件下载进度条的文章就介绍到这了,更多相关Python展示文件下载进度条内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python 给下载文件显示进度条和下载时间的实现

    大家在下载文件时能够显示下载进度和时间非常好,其实实现它方法很简单,这里我写了个进度条的模块,其中还附带上了运行时间也就是下载时间了. 该模块调用了三个库: 1.os 2.requests 3.time 话不多说,先上代码!!!. # 进度条模块 def progressbar(url,path): if not os.path.exists(path): # 看是否有该文件夹,没有则创建文件夹 os.mkdir(path) start = time.time() #下载开始时间 respons

  • Python HTTP下载文件并显示下载进度条功能的实现

    下面的Python脚本中利用request下载文件并写入到文件系统,利用progressbar模块显示下载进度条. 其中利用request模块下载文件可以直接下载,不需要使用open方法,例如: import urllib import requests.packages.urllib3 requests.packages.urllib3.disable_warnings() url = "https://raw.githubusercontent.com/racaljk/hosts/maste

  • Python展示文件下载进度条

    目录 1.前言 2.requests 3.思考 1.前言 大家在用Python写一些小程序的时候,经常都会用到文件下载,对于一些较小的文件,大家可能不太在乎文件的下载进度,因为一会就下载完毕了. 但是当文件较大,比如下载chromedriver的时候,我们如果能够看到下载的进度条,那该多么友好.毕竟在npm,pip安装包的时候都有类似的进度条. 那笔者今天就给大家分享一个展示文件下载进度条的方法. 2.requests requests库相信大家都用过,做接口测试少不了它.其实我们平时下载文件,

  • 利用Python展示文件下载进度条

    目录 1.前言 2.requests 3.思考 1.前言 大家在用Python写一些小程序的时候,经常都会用到文件下载,对于一些较小的文件,大家可能不太在乎文件的下载进度,因为一会就下载完毕了. 但是当文件较大,比如下载chromedriver的时候,我们如果能够看到下载的进度条,那该多么友好.毕竟在npm,pip安装包的时候都有类似的进度条. 那笔者今天就给大家分享一个展示文件下载进度条的方法. 2.requests requests库相信大家都用过,做接口测试少不了它.其实我们平时下载文件,

  • python tqdm实现进度条的示例代码

    一.前言 \quad \quad 有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况.这对于第三方库非常丰富的Python来说,想要实现这一功能并不是什么难事. \quad \quad tqdm就能非常完美的支持和解决这些问题,可以实时输出处理进度而且占用的CPU资源非常少,支持循环处理.多进程.递归处理.还可以结合linux的命令来查看处理情况,等进度展示. 我们先来看一下进度条的效果. from tq

  • Python实现采用进度条实时显示处理进度的方法

    本文实例讲述了Python实现采用进度条实时显示处理进度的方法.分享给大家供大家参考,具体如下: 前言 在大多数时候,我们的程序会一直进行循环处理.这时候,我们非常希望能够知道程序的处理进度,由此来决定接下来该做些什么.接下来告诉大家如何简单又漂亮的实现这一功能. 如何使用这个类 使用这个类很简单,只需要三步即可完成,如下: process_bar = ShowProcess(max_steps) # 1.在循环前定义类的实体, max_steps是总的步数 for i in range(max

  • python实现文本进度条 程序进度条 加载进度条 单行刷新功能

    python实现文本进度条 程序进度条 加载进度条 单行刷新功能,具体内容如下所示: 利用time库来替代某个程序 的进行过程,做实例, 思路是,简单打印出来程序进度 单行刷新关键是\r, python默认是print后换行,所以加一个\r是光标回退到之前位置 import time tm=10 print('{:-^18}'.format('开始')) for i in range(tm+1): a='#'*i b='.'*(tm-i) c=(i/tm)*100 print('\r{:^3.0

  • python动态文本进度条的实例代码

    如何实现动态单行刷新,答案是--覆盖 但是怎么实现覆盖呢 关键在于不换行而且能回退到开始位置 那么就要用到 \r 这个东西就是让光标回退到当前行初始位置 记得不能让换行 上码 #文本进度条.py import time scale = 50 print("执行开始".center(scale, "-"))//居中对齐 start = time.perf_counter()//获取起始时间 for i in range(scale+1): a = i*'*' b =

  • Python制作运行进度条的实现效果(代码运行不无聊)

    一.普通进度条 import sys import time # 普通进度条 # 在代码迭代运行中进行统计计算,并使用格式化字符串输出代码运行进度 def progress_bar(): for i in range(1, 101): # 1-100 print("\r", end="") # \r 表示将光标的位置回退到本行的开头位置 print("Download progress: {} {}%".format("▋"

  • vue项目实现文件下载进度条功能

    平时业务中下载文件方式常见的有俩种: 第一种,直接访问服务器的文件地址,自动下载文件: 第二种 ,服务器返回blob文件流,再对文件流进行处理和下载. 一般小文件适用于第一种下载方案,不占用过多服务器资源,而对于体积庞大的文件,常常使用文件流的方式进行传输,如图: 文件流传输成功后通过代码可以立即发起浏览器下载该文件流: 这种方式也有弊端,在文件流传输过程中,用户无法感知文件流的传输状态(进度),会造成一些困扰(无法确定当前下载操作是否已经生效).针对这种情况,我们可以在页面显示文件流的状态和传

  • vue+element+springboot实现文件下载进度条展现功能示例

    目录 1. 需求背景 2. 优化方案 3. 具体实现 3.1 前端代码 3.2 后台代码 4. 总结 本文主要介绍了vue+element+springboot实现文件下载进度条展现功能示例,分享给大家,具体如下 最终效果图 1. 需求背景 最近接到一个优化需求,原系统文件下载功能体验不友好,特别是下载一些比较耗时的文件,用户在页面上傻等不知道下载的进度是怎么样的,总以为是系统卡死了. 2. 优化方案 后台优化下载速度(可以研究一下分片下载,这里不做展开) 改造前端用户体验(比如点击下载后你要显

  • Vue文件下载进度条的实现过程

    目录 需求场景: 实现原理: 优化过程: 下载方法的组件引入mixin Vuex配置进度条 最终效果图 参考文章: 需求场景: 1.大文件压缩过后依旧很大,接口返回response速度过慢,页面没有任何显示,体验太差. 2.需要在浏览器显示正在加载中的状态优化显示,提高用户体验 实现原理: 1.使用onDownloadProgress方法API获取进度及文件大小等数据 2.mixin混入实现监听进度条进度 3.vuex修改进度条进度 优化过程: 使用onDownloadProgress封装一个下

随机推荐