如何计算给定块号、大小和下载总大小的下载进度?

How to compute the progress of a download given the chunk number, its size and the total size of the download?

Python 的 urllib.request.urlretrieve() 接受一个函数,当从网络中获取每个块时将调用该函数。

该函数使用三个参数调用:块的渐进标识符、块的大小和下载的总大小。

根据这三个信息,我可以计算出已经获取的字节数吗?这将用于计算下载进度。

我很想这样做 chunk_number * chunk_size / download_size,但我不确定所有块的块大小是否恒定。

您可以保留目前所见所有尺寸的总和 运行。

试试这个:

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'))