2017-07-18 6 views
0

Pythonのurllib.request.urlretrieve()は、各チャンクがネットワークからフェッチされるときに呼び出される関数を受け入れます。チャンク番号、サイズ、およびダウンロードの合計サイズを指定して、ダウンロードの進行状況を計算するにはどうすればよいですか?

この関数は、チャンクのプログレッシブID、サイズ、ダウンロードの合計サイズの3つの引数を指定して呼び出されます。

これらの3つの情報があれば、すでにフェッチされたバイト数を計算できますか?これは、ダウンロードの進行状況を計算するために使用されます。

私は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')) 
関連する問題