亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python3使用requests模塊實(shí)現(xiàn)顯示下載進(jìn)度的方法詳解

 更新時(shí)間:2019年02月15日 09:17:19   作者:微寒Super  
這篇文章主要介紹了Python3使用requests模塊實(shí)現(xiàn)顯示下載進(jìn)度的方法,結(jié)合實(shí)例形式分析了Python3中requests模塊的配置、使用及顯示進(jìn)度條類的相關(guān)定義方法,需要的朋友可以參考下

本文實(shí)例講述了Python3使用requests模塊實(shí)現(xiàn)顯示下載進(jìn)度的方法。分享給大家供大家參考,具體如下:

一、配置request

1. 相關(guān)資料

請(qǐng)求關(guān)鍵參數(shù):stream=True。默認(rèn)情況下,當(dāng)你進(jìn)行網(wǎng)絡(luò)請(qǐng)求后,響應(yīng)體會(huì)立即被下載。你可以通過(guò) stream 參數(shù)覆蓋這個(gè)行為,推遲下載響應(yīng)體直到訪問(wèn) Response.content 屬性。

tarball_url = 'https://github.com/kennethreitz/requests/tarball/master'
r = requests.get(tarball_url, stream=True)

此時(shí)僅有響應(yīng)頭被下載下來(lái)了,連接保持打開(kāi)狀態(tài),因此允許我們根據(jù)條件獲取內(nèi)容:

if int(r.headers['content-length']) < TOO_LONG:
 content = r.content
 ...

進(jìn)一步使用 Response.iter_contentResponse.iter_lines 方法來(lái)控制工作流,或者以 Response.raw 從底層urllib3的 urllib3.HTTPResponse

from contextlib import closing
with closing(requests.get('http://httpbin.org/get', stream=True)) as r:
  # Do things with the response here.

保持活動(dòng)狀態(tài)(持久連接)

歸功于urllib3,同一會(huì)話內(nèi)的持久連接是完全自動(dòng)處理的,同一會(huì)話內(nèi)發(fā)出的任何請(qǐng)求都會(huì)自動(dòng)復(fù)用恰當(dāng)?shù)倪B接!

注意:只有當(dāng)響應(yīng)體的所有數(shù)據(jù)被讀取完畢時(shí),連接才會(huì)被釋放到連接池;所以確保將 stream 設(shè)置為 False 或讀取 Response 對(duì)象的 content 屬性。

2. 下載文件并顯示進(jìn)度條

with closing(requests.get(self.url(), stream=True)) as response:
  chunk_size = 1024 # 單次請(qǐng)求最大值
  content_size = int(response.headers['content-length']) # 內(nèi)容體總大小
  progress = ProgressBar(self.file_name(), total=content_size,
                   unit="KB", chunk_size=chunk_size, run_status="正在下載", fin_status="下載完成")
  with open(file_name, "wb") as file:
    for data in response.iter_content(chunk_size=chunk_size):
      file.write(data)
      progress.refresh(count=len(data))

二、進(jìn)度條類的實(shí)現(xiàn)

在Python3中,print()方法的默認(rèn)結(jié)束符(end='\n'),當(dāng)調(diào)用完之后,光標(biāo)自動(dòng)切換到下一行,此時(shí)就不能更新原有輸出。

將結(jié)束符改為“\r”,輸出完成之后,光標(biāo)會(huì)回到行首,并不換行。此時(shí)再次調(diào)用print()方法,就會(huì)更新這一行輸出了。

結(jié)束符也可以使用“\d”,為退格符,光標(biāo)回退一格,可以使用多個(gè),按需求回退。

在結(jié)束這一行輸出時(shí),將結(jié)束符改回“\n”或者不指定使用默認(rèn)

下面是一個(gè)格式化的進(jìn)度條顯示模塊。代碼如下:

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.status)
    self.unit = unit
    self.seq = sep
  def __get_info(self):
    # 【名稱】狀態(tài) 進(jìn)度 單位 分割線 總數(shù) 單位
    _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)

三、參考資料

http://cn.python-requests.org/en/latest/user/advanced.html

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python函數(shù)使用技巧總結(jié)》、《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門(mén)與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • TensorFlow 讀取CSV數(shù)據(jù)的實(shí)例

    TensorFlow 讀取CSV數(shù)據(jù)的實(shí)例

    今天小編就為大家分享一篇TensorFlow 讀取CSV數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • python實(shí)現(xiàn)對(duì)數(shù)組按指定列排序

    python實(shí)現(xiàn)對(duì)數(shù)組按指定列排序

    這篇文章主要介紹了python實(shí)現(xiàn)對(duì)數(shù)組按指定列排序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 手把手教你搭建python+selenium自動(dòng)化環(huán)境(圖文)

    手把手教你搭建python+selenium自動(dòng)化環(huán)境(圖文)

    本文主要介紹了手把手教你搭建python+selenium自動(dòng)化環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 在Django的URLconf中使用多個(gè)視圖前綴的方法

    在Django的URLconf中使用多個(gè)視圖前綴的方法

    這篇文章主要介紹了在Django的URLconf中使用多個(gè)視圖前綴的方法,Django是Python中最為著名的遵循MVC結(jié)構(gòu)的開(kāi)發(fā)框架,需要的朋友可以參考下
    2015-07-07
  • Python虛擬環(huán)境的創(chuàng)建和使用詳解

    Python虛擬環(huán)境的創(chuàng)建和使用詳解

    這篇文章主要給大家介紹了關(guān)于Python虛擬環(huán)境的創(chuàng)建和使用的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Django 實(shí)現(xiàn)將圖片轉(zhuǎn)為Base64,然后使用json傳輸

    Django 實(shí)現(xiàn)將圖片轉(zhuǎn)為Base64,然后使用json傳輸

    這篇文章主要介紹了Django 實(shí)現(xiàn)將圖片轉(zhuǎn)為Base64,然后使用json傳輸,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • 使用keras實(shí)現(xiàn)densenet和Xception的模型融合

    使用keras實(shí)現(xiàn)densenet和Xception的模型融合

    這篇文章主要介紹了使用keras實(shí)現(xiàn)densenet和Xception的模型融合,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • python3中函數(shù)參數(shù)的四種簡(jiǎn)單用法

    python3中函數(shù)參數(shù)的四種簡(jiǎn)單用法

    這篇文章主要介紹了python3中函數(shù)參數(shù)的四種簡(jiǎn)單用法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • Python 抓取數(shù)據(jù)存儲(chǔ)到Redis中的操作

    Python 抓取數(shù)據(jù)存儲(chǔ)到Redis中的操作

    這篇文章主要介紹了Python 抓取數(shù)據(jù)存儲(chǔ)到Redis中的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • 淺談python出錯(cuò)時(shí)traceback的解讀

    淺談python出錯(cuò)時(shí)traceback的解讀

    這篇文章主要介紹了淺談python出錯(cuò)時(shí)traceback的解讀,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論