python requests模块下载文件,python中如何使用requests模块下载文件并获取进度提示?...

Reference: https://www.zhihu.com/question/41132103

#!/usr/bin/env python3

import requests

from contextlib import closing

"""

作者:微微寒

链接:https://www.zhihu.com/question/41132103/answer/93438156

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

"""

class ProgressBar(object):

def __init__(self, title, count=0.0, run_status=None, fin_status=None, total=100.0, unit='', sep='/', chunk_size=1.0):

super(ProgressBar, self).__init__()

self.info = "[%s] %s %.2f %s %s %.2f %s"

self.title = title

self.total = total

self.count = count

self.chunk_size = chunk_size

self.status = run_status or ""

self.fin_status = fin_status or " " * len(self.statue)

self.unit = unit

self.seq = sep

def __get_info(self):

# 【名称】状态 进度 单位 分割线 总数 单位

_info = self.info % (self.title, self.status, self.count/self.chunk_size, self.unit, self.seq, self.total/self.chunk_size, self.unit)

return _info

def refresh(self, count=1, status=None):

self.count += count

# if status is not None:

self.status = status or self.status

end_str = "\r"

if self.count >= self.total:

end_str = '\n'

self.status = status or self.fin_status

print(self.__get_info(), end=end_str)

def main():

with closing(requests.get("http://www.futurecrew.com/skaven/song_files/mp3/razorback.mp3", stream=True)) as response:

chunk_size = 1024

content_size = int(response.headers['content-length'])

progress = ProgressBar("razorback", total=content_size, unit="KB", chunk_size=chunk_size, run_status="正在下载", fin_status="下载完成")

# chunk_size = chunk_size < content_size and chunk_size or content_size

with open('./file.mp3', "wb") as file:

for data in response.iter_content(chunk_size=chunk_size):

file.write(data)

progress.refresh(count=len(data))

if __name__ == '__main__':

main()

Python中xlrd和xlwt模块使用方法 (python对excel文件的操作)

本文主要介绍可操作excel文件的xlrd.xlwt模块.其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 安装xlrd和xlwt模块 xlrd和xlwt模块不是 ...

Python中第三方库Requests库的高级用法详解

Python中第三方库Requests库的高级用法详解 虽然Python的标准库中urllib2模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人实在感觉不好.它已经不适合现在的时代, ...

Python中os和shutil模块实用方法集…

Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...

Python中os和shutil模块实用方法集锦

Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...

python中的第三方日志模块logging

基本上每个系统都有自己的日志系统,可以使自己写的,也可以是第三方的.下面来简单介绍一下python中第三方的日志模块,入手还是比较简单的,但是也很容易给自己埋雷. 下面是我参考的资料链接 入手demo ...

python中的logging日志模块

日志是程序不可或缺的一部分.它可以记录程序的运行情况,帮助我们更便捷地发现问题,而python中的logging日志模块给我们提供了这个机会. logging给我们提供了五种函数用来输出日志:debu ...

Python中好用的模块们

目录 Python中好用的模块们 datetime模块 subprocess模块 matplotlib折线图 importlib模块 Python中好用的模块们 datetime模块 ​ 相信我们都使 ...

python中根据字符串导入模块module

python中根据字符串导入模块module 需要导入importlib,使用其中的import_module方法 import importlib modname = 'datetime' date ...

实现在 &period;net 中使用 HttpClient 下载文件时显示进度

在 .net framework 中,要实现下载文件并显示进度的话,最简单的做法是使用 WebClient 类.订阅 DownloadProgressChanged 事件就行了. 但是很可惜,WebC ...

随机推荐

android&colon;layout&lowbar;weight的真实含义

首先声明只有在Linearlayout中,该属性才有效.之所以android:layout_weight会引起争议, 是因为在设置该属性的同时,设置android:layout_width为wrap_ ...

AndroidCharts为折线图表添加y坐标

AndroidCharts 是一款轻量级的图表显示控件,对比起Android-Charts和AChartEngine来说简单和活泼了很多,适合数据展示不需要太过详细专业的场合,它支持简单且带动画的折线 ...

PCB使用技巧

1.元器件标号自动产生或已有的元器件标号取消重来Tools 工具|Annotate…注释All Part:为所有元器件产生标号Reset Designators:撤除所有元器件标号2.单面板设置:De ...

MySQL字符串中数字排序的问题

1.select * from table where 1   order by id*1 desc; 2.select * from table where 1 order by id+0 desc ...

jQuery表单验证以及将表单序列化为json对象小练习

jquery表单验证(非实时验证),同时,将表单序列化为json对象提交表单.

sonp跨域请求

sonp跨域请求学习笔记   前言 ajax,用苍白的话赞扬:很好. 我们可以使用ajax实现异步获取数据,减少服务器运算时间,大大地改善用户体验:我们可以使用ajax实现小系统组合大系统:我们还可以 ...

Java JSON数据处理

比方说要处理这么 {"data":[{"salt":"","plaintext":"xiaoxu", ...

mysql常用基础操作语法(七)--统计函数和分组查询【命令行模式】

注:文中所有的...代表多个. 1.使用count统计条数:select count(字段名...) from tablename; 2.使用avg计算字段的平均值:select avg(字段名) f ...

UNIX环境高级编程——守护进程列表

amd:自动安装NFS(网络文件系统)守侯进程apmd:高级电源治理Arpwatch:记录日志并构建一个在LAN接口上看到的以太网地址和ip地址对数据库Autofs:自动安装治理进程automount ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值