Python3 的断点续传(下载)

本文介绍了一种使用Python实现断点续传和多线程下载的方法。通过向服务器发送Range请求头,客户端可以告知服务器已下载的部分,从而实现从上次断开的地方继续下载。代码示例展示了如何将一个大文件分块下载,为实现更高效的下载提供了思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:
python3.6(requests)
win7 64位

断点下载 是由客户端告诉服务器已经下载的大小,然后服务器会将指针移动到相应的position,继续读出,把文件返回给客户端
下列代码只是将一个文件分三次下载,延伸多线程下载与断点下载(获取本地文件大小后,接着下载)

import requests
import time

def downfile(filename,url,start,end):
    header={
        'Range': 'bytes=%d-%d'%(start,end-1)}
    try:
        res=requests.get(url,stream=True, verify=False,headers=header)
    except BaseException as e:
        print(e)
    with open(filename,'ab+') as F:
        F.seek(start)
        F.truncate()#删除当前指针后的内容
        s=start
        for i in res.iter_content(1024):
            F.write(i)
            s=s+len(i)
            #print(s)
            # time.sleep(1)
            print('{:.2%}  \r'.format(s/5590000))

if __name__ == '__main__':

    _url = 'http://xxx/1.txt'
    filesize=5590000//3  #5590000,文件大小
    for i in range(3):
        filename="1.txt"
        flag=downfile(filename,_url,filesize*i,filesize*(i+1))

必须设置:stream=True,也可以根据本地已下载文件大小接着下载。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值