2017-07-18 85 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'))