最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 工具類實(shí)現(xiàn)大文件斷點(diǎn)續(xù)傳功能詳解

 更新時間:2021年11月08日 15:02:55   作者:劍客阿良_ALiang  
用python進(jìn)行大文件下載的時候,一旦出現(xiàn)網(wǎng)絡(luò)波動問題,導(dǎo)致文件下載到一半。如果將下載不完全的文件刪掉,那么又需要從頭開始,如果連續(xù)網(wǎng)絡(luò)波動,是不是要頭禿了。本文提供斷點(diǎn)續(xù)傳下載工具方法,希望可以幫助到你

依賴

os、sys、requests

工具代碼

廢話不多說,上代碼。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Oct 23 13:54:39 2021
@author: huyi
"""
 
import os
import sys
 
import requests
 
 
 
def download(url, file_path):
    # 重試計(jì)數(shù)
    count = 0
    # 第一次請求是為了得到文件總大小
    r1 = requests.get(url, stream=True, verify=False)
    total_size = int(r1.headers['Content-Length'])
 
    # 判斷本地文件是否存在,存在則讀取文件數(shù)據(jù)大小
    if os.path.exists(file_path):
        temp_size = os.path.getsize(file_path)  # 本地已經(jīng)下載的文件大小
    else:
        temp_size = 0
        
    # 對比一下,是不是還沒下完
    print(temp_size)
    print(total_size)
    
    # 開始下載
    while count < 10:
        if count != 0:
            temp_size = os.path.getsize(file_path)
        # 文件大小一致,跳出循環(huán)
        if temp_size >= total_size:
            break
        count += 1
        print(
            "第[{}]次下載文件,已經(jīng)下載數(shù)據(jù)大小:[{}],應(yīng)下載數(shù)據(jù)大小:[{}]".format(
                count, temp_size, total_size))
        # 重新請求網(wǎng)址,加入新的請求頭的
        # 核心部分,這個是請求下載時,從本地文件已經(jīng)下載過的后面下載
        headers = {"Range": f"bytes={temp_size}-{total_size}"}
        # r = requests.get(url, stream=True, verify=False)
        r = requests.get(url, stream=True, verify=False, headers=headers)
 
        # "ab"表示追加形式寫入文件
        with open(file_path, "ab") as f:
            if count != 1:
                f.seek(temp_size)
            for chunk in r.iter_content(chunk_size=1024 * 64):
                if chunk:
                    temp_size += len(chunk)
                    f.write(chunk)
                    f.flush()
                    ###這是下載實(shí)現(xiàn)進(jìn)度顯示####
                    done = int(50 * temp_size / total_size)
                    sys.stdout.write("\r[%s%s] %d%%" % (
                        '█' * done, ' ' * (50 - done), 100 * temp_size / total_size))
                    sys.stdout.flush()
        print("\n")
 
    return file_path

代碼說明:

1、重試次數(shù)可以自己修改,按照需求來,我這邊是10次。

2、增加了進(jìn)度條的打印,別問,好看就完了。

驗(yàn)證一下,我們準(zhǔn)備個文件下載服務(wù)。上文件服務(wù)代碼。代碼對flask、gevent有依賴。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Oct 23 19:53:18 2021
@author: huyi
"""
 
from flask import Flask, request, make_response, send_from_directory
from gevent.pywsgi import WSGIServer
from gevent import monkey
 
# 將python標(biāo)準(zhǔn)的io方法,都替換成gevent中的同名方法,遇到io阻塞gevent自動進(jìn)行協(xié)程切換
monkey.patch_all()
app = Flask(__name__)
 
@app.route("/download", methods=['GET'])
def download_file():
    get_data = request.args.to_dict()
    file_path = get_data.get('fileName')
 
    response = make_response(
        send_from_directory('/Users/huyi/Movies/Videos',file_path,as_attachment=True))
    response.headers["Content-Disposition"] = "attachment; filename={}".format(
        file_path.encode().decode('latin-1'))
    return response
 
if __name__ == '__main__':
    WSGIServer(('0.0.0.0', 8080), app).serve_forever()

啟動文件下載服務(wù),測試下載代碼

download('http://localhost:8080/download?fileName=test.mp4', '/Users/huyi/Downloads/test.mp4')

首先我們下載一部分,然后關(guān)閉,模擬下載一半的情況。

重新執(zhí)行一下,把剩下的執(zhí)行

OK,驗(yàn)證通過。

總結(jié)

斷點(diǎn)續(xù)傳的這部分代碼,你可以好好理解一下原理,其實(shí)不復(fù)雜。還是不明白可以私信我。

如果本文對你有幫助,請點(diǎn)個贊支持一下吧。

到此這篇關(guān)于Python 工具類實(shí)現(xiàn)大文件斷點(diǎn)續(xù)傳功能詳解的文章就介紹到這了,更多相關(guān)Python 文件下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python BautifulSoup 節(jié)點(diǎn)信息

    Python BautifulSoup 節(jié)點(diǎn)信息

    這篇文章主要介紹了Python BautifulSoup 節(jié)點(diǎn)信息,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 關(guān)于使用Python的time庫制作進(jìn)度條程序

    關(guān)于使用Python的time庫制作進(jìn)度條程序

    這篇文章主要介紹了關(guān)于使用Python的time庫制作進(jìn)度條程序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Python區(qū)塊鏈范圍結(jié)論及Genesis Block的添加教程

    Python區(qū)塊鏈范圍結(jié)論及Genesis Block的添加教程

    這篇文章主要為大家介紹了Python區(qū)塊鏈范圍結(jié)論及Genesis Block的添加,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • python抓取網(wǎng)頁內(nèi)容示例分享

    python抓取網(wǎng)頁內(nèi)容示例分享

    這篇文章主要介紹了python抓取網(wǎng)頁內(nèi)容示例,在抓取的時候?qū)τ趃bk編碼網(wǎng)頁還需要轉(zhuǎn)化一下,具體看下面的示例吧
    2014-02-02
  • python處理文本文件實(shí)現(xiàn)生成指定格式文件的方法

    python處理文本文件實(shí)現(xiàn)生成指定格式文件的方法

    這篇文章主要介紹了python處理文本文件實(shí)現(xiàn)生成指定格式文件的方法,有一定的實(shí)用價值,需要的朋友可以參考下
    2014-07-07
  • 詳解Django自定義圖片和文件上傳路徑(upload_to)的2種方式

    詳解Django自定義圖片和文件上傳路徑(upload_to)的2種方式

    這篇文章主要介紹了詳解Django自定義圖片和文件上傳路徑(upload_to)的2種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 對python csv模塊配置分隔符和引用符詳解

    對python csv模塊配置分隔符和引用符詳解

    今天小編就為大家分享一篇對python csv模塊配置分隔符和引用符詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python中pandas庫的常用操作實(shí)例

    Python中pandas庫的常用操作實(shí)例

    這篇文章主要介紹了Python中pandas庫的常用操作實(shí)例,Pandas 庫是一個免費(fèi)、開源的第三方 Python 庫,是 Python 數(shù)據(jù)分析必不可少的工具之一,它為 Python 數(shù)據(jù)分析提供了高性能,且易于使用的數(shù)據(jù)結(jié)構(gòu),即 Series 和 DataFrame,需要的朋友可以參考下
    2023-07-07
  • python使用turtle庫繪制樹

    python使用turtle庫繪制樹

    這篇文章主要為大家詳細(xì)介紹了python使用turtle庫繪制樹,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python?pandas中to_sql的使用及問題詳解

    Python?pandas中to_sql的使用及問題詳解

    今天在使用 Pandas 的 to_sql 方法時,遇到一些問題,所以下面這篇文章主要給大家介紹了關(guān)于Python?pandas中to_sql的使用及問題的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12

最新評論

久治县| 门头沟区| 凉城县| 漾濞| 宣威市| 中超| 赣州市| 临武县| 兰西县| 重庆市| 枞阳县| 太和县| 佛山市| 民勤县| 瑞安市| 吉安县| 漳州市| 大关县| 徐水县| 石河子市| 三明市| 仙游县| 海伦市| 高阳县| 玛多县| 大新县| 萨嘎县| 皋兰县| 枣强县| 金塔县| 崇州市| 嘉定区| 华安县| 澜沧| 大竹县| 建阳市| 乌鲁木齐市| 平乐县| 彭州市| 杨浦区| 罗定市|