Python のプログレスバー

Manav Narula 2023年1月30日
  1. Python の tdqm モジュールを使用してプログレスバーを作成する
  2. Python の progressbar モジュールを使用してプログレスバーを作成する
  3. Python で独自の関数を作成して、プログレスバーを作成する
Python のプログレスバー

プログラミングの世界では、大量のコードを処理します。プログラムのコンパイルと実行には時間がかかる場合があります。したがって、どの程度の進歩があったか、およびプログラムの完了予定時刻を知ることは少し役に立ちます。このような状況では、Python でプログレスバーを使用できます。さらに、プログラムが途中で停止したかどうかを識別するのに役立ちます。

Python には、プログラムの簡単なプログレスバーを作成してこれを支援するのに役立つ多くのライブラリがあります。このチュートリアルでは、各方法について 1つずつ説明します。

Python の tdqm モジュールを使用してプログレスバーを作成する

tdqm ライブラリには、基本的なプログレスバーを作成するための迅速で効率的なフレームワークがあります。ターミナル、Python ノートブックでうまく機能し、Windows、Linux、および macOS と互換性があります。

次のコードでは、このモジュールの関数を使用して簡単なプログレスバーを作成します。

from time import sleep
from tqdm import tqdm

for i in tqdm(range(10)):
    sleep(0.2)

ループを繰り返し、繰り返しごとにプログレスバーもインクリメントされます。sleep() 関数は、指定された秒数の間コンパイラを一時停止するために使用されます。デフォルトでは、バーには残り時間、1 秒あたりの反復回数、およびパーセンテージが表示されることに注意してください。

このチュートリアルで説明されているすべてのモジュールの中で、このモジュールのオーバーヘッドは最小です。

Python の progressbar モジュールを使用してプログレスバーを作成する

progressbar モジュールは、tdqm モジュールとほぼ同じように機能します。これに加えて、プログレスバーをアニメーション化し、プログレスバーに表示されるウィジェットを使用するオプションがあります。

次のコードは、この例を示しています。

import time
import progressbar

for i in progressbar.progressbar(range(100)):
    time.sleep(0.02)

progressbar2 は Python にも存在し、progressbar のフォークです。強力でカスタマイズ可能な機能により、非常に人気があります。また、プログレスバーを使用した出力ステートメントもサポートしています。欠点として、このモジュールは何年もメンテナンスされていません。

プログレスバーの作成に役立つ alive-progressprogress など、より多くのライブラリが利用可能ですが、これら 2つが最も頻繁に使用されることに注意してください。それらの唯一の違いは、これらのライブラリが提供するアニメーションとその他のカスタマイズです。

Python で独自の関数を作成して、プログレスバーを作成する

プログレスバーに似たシンプルな関数を作成することもできます。以下のコードはこれを実装しています。

import time
import sys


def progressbar(it, prefix="", size=60, file=sys.stdout):
    count = len(it)

    def show(j):
        x = int(size * j / count)
        file.write("%s[%s%s] %i/%i\r" % (prefix, "#" * x, "." * (size - x), j, count))
        file.flush()
        file.write("\n")

    show(0)
    for i, item in enumerate(it):
        yield item
        show(i + 1)
        file.write("\n")
    file.flush()


for i in progressbar(range(15), "Computing: ", 40):
    time.sleep(0.1)

出力:

Computing: [........................................] 0/15
Computing: [##......................................] 1/15
Computing: [#####...................................] 2/15
Computing: [########................................] 3/15
Computing: [##########..............................] 4/15
Computing: [#############...........................] 5/15
Computing: [################........................] 6/15
Computing: [##################......................] 7/15
Computing: [#####################...................] 8/15
Computing: [########################................] 9/15
Computing: [##########################..............] 10/15
Computing: [#############################...........] 11/15
Computing: [################################........] 12/15
Computing: [##################################......] 13/15
Computing: [#####################################...] 14/15
Computing: [########################################] 15/15

必要な反復の合計を計算し、反復ごとに # 記号をインクリメントして出力します。

著者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn