Python3:tqdmでダウンロードの進行状況を表示する

でかいファイルをダウンロード中に、後どれくらいかかるのか、あるいは、ファイルがきちんとダウンロードされたのかを知ることは重要なので、今回は、ダウンロードの進行状況を知らせるprogress bar(プログレスバー)を表示させるコードを書くことにした。

tqdmというモジュールを使うといいらしいので、早速インストールした。

conda install tqdm (pip install tqdm)

ファイルは以下のコードで簡単にダウンロードできる。urlにファイルが置いてあるサイトのアドレスを指定して、filenameにダウンロードするファイル名を指定する。

import requests

url = "https://some-url.com/some.zip"
filename = "some.zip"
r = requests.get(url, stream=True)

tqdmを利用するには以下のようにモジュールをインポートする。

from tqdm import tqdm

こうすることで、tqdmモジュールをpbarとして使えるようになる。

pbar = tqdm(total=total_size, unit='B', unit_scale=True)

tqdmはtotalを指定しないとprogress barを出さないので注意が必要だ。

最終的なコードは以下のような簡素なものになる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from tqdm import tqdm
import requests

url = "https://github.com/xrubio/evolvingPlanet/archive/master.zip"
filename = "master.zip"
r = requests.get(url, stream=True)
total_size = int(r.headers.get('content-length', 0));
chunk_size = 32 * 1024
downloaded = 0

pbar = tqdm(total=total_size, unit='B', unit_scale=True)
with open(filename, 'wb') as f:
        for data in r.iter_content(chunk_size):
            f.write(data)
            downloaded+=len(data)
            pbar.update(chunk_size)
           
if total_size != 0 and downloaded != total_size:
    print("ERROR, download failed")

このコードを実行させると以下のようなアウトプットを吐き出す。
tqdm-download-progress-bar
Pretty neat huh?

参考サイトhttps://stackoverflow.com/

スポンサーリンク