2017-07-18 216 views
0

Python的urllib.request.urlretrieve()接受從網絡中獲取每個塊時將被調用的函數。如何根據塊號,大小和下載的總大小來計算下載的進度?

使用三個參數調用該函數:塊的漸進標識符,其大小和下載的總大小。

鑑於這三個信息,我可以計算已獲取的字節數?這將用於計算下載的進度。

我很想做chunk_number * chunk_size/download_size,但我不確定所有塊的塊大小是否不變。

+1

有遺憾的是沒有理由假設塊都將是相同的大小!如果您想要提供準確的下載百分比,您可能必須保持運行總和(例如'total_bytes + = most_recent_chunk.size') –

回答

1

您可以保持迄今爲止所見的所有尺寸的總計。

試試這個:

import urllib.request 


def my_downloader(url, filename = None): 
    running_total = 0 
    def my_reporthook(count, size, total): 
     nonlocal running_total 
     running_total += size 
     print ("{}%".format(100*running_total//total)) 
    return urllib.request.urlretrieve(url, filename, my_reporthook) 

print (my_downloader('https://www.gutenberg.org/files/55146/55146-h.zip'))