【Python】進捗バーを自作、作成する方法|tqdmの使い方

サムネイル
当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク
本記事を読むと以下の実行ができます

Pythonで進捗バーを表示する。

実行例

Pythonで処理する際に、どれだけ処理が完了したのかコンソール画面に表示します。
進捗バー(プログレスバー)を作成したい方に向けて、tqdmを使用した進捗表示の方法を解説します。

本記事では、tqdmの基本の使い方や実際のソースコードを例示し、
処理の進捗をわかりやすく表示する方法を紹介します。

本記事は次の人におすすめ
  • Pythonで進捗バーを使いたい人
  • 処理の進捗を視覚的に表示したい開発者
  • 大量データを処理する際の進捗表示をスマートに実装したい方
  • tqdmの基本的な使い方を覚えたい人
  • Pythonで自動化処理を行う際に進捗ゲージを追加したい方
  • 処理時間が長い作業の進捗をわかりやすく表示したい方
Udemyで学習する
スポンサーリンク

tqdmとは

tqdmについて

モジュールtqdmは、処理の進捗を視覚的に表示するための便利なライブラリです。

大量のデータや複数の処理を行う際、その進捗を表示することで、
開発者やユーザーに安心感を提供します。

進捗表示を使うことで、大規模なプロジェクトや複雑なタスクでも、
現在どの程度進行しているのかを一目で把握できるようになります。

例えば、データ処理の際にも、どれくらいの作業が完了したか、
予定に対してどれだけ進んでいるのかを視覚化することが可能です。

tqdmをインストールするには、pipを使用します。

pip install tqdm

基本的な機能

基本的な使い方としては、forループにtqdmを追加するだけで、
簡単に進捗バーを表示することができます。

tqdmは、処理の進行状況を正確に視覚化するだけでなく、
プログラムのパフォーマンスにほとんど負担をかけずに自然に表示できるので、非常に便利です。

また、進捗をリアルタイムで確認できるため、
長時間の処理でもユーザーに安心感を与えることができます。

from tqdm import tqdm
import time

for i in tqdm(range(10), desc="Processing"):
    time.sleep(0.5)  # 一時停止を作る

このコードでは、10回のループを繰り返している間に進捗バーが表示されます。

timeモジュールのsleep関数を使ったカウントダウンタイマーを解説しています。

descを使って処理内容を説明することで、
何をしているのかをユーザーにわかりやすく伝えることができます。

これにより、ユーザーにも進行状況が伝わり、処理が進んでいる感覚を共有できます。

すべての処理の完了率をゲージで表示

完了率表示

指定されたフォルダ内の画像ファイルをWebP形式に変換する処理を実行します。

処理は、フォルダ内のファイルを順次ループし、
PillowライブラリのImage関数を使って画像をWebP形式に変換します。

webpに一括変換を解説しています。

その際、tqdmを用いて進捗状況を一歩ずつ表示し、処理の完了までの時間を視覚化しています。

これにより、処理がどの程度進んでいるかを簡単に把握することができ、
使用者や開発者が実行時間を予測したり、処理の進行を確認することが可能です。

また、処理中にエラーが発生した場合、どのファイルで問題が発生したのかを明確に特定できるため、トラブルシューティングも容易です。

ソースコード・解説

  • モジュール名

「PIL (Pillow)」:Python Imaging Library(PIL)を拡張したPillowモジュールは、画像ファイルの読み込みや保存、編集を行うために必要です。インストールは「pip install Pillow」を使用します。
「os」:ファイルやディレクトリのパス操作を行うために必要です。特にフォルダの存在確認やファイルのパス取得に使用します。
「tqdm」:長時間実行する処理の進捗状況を視覚的に表示するために必要です。インストールは「pip install tqdm」を使用します。
「time」:処理に微小な遅延を持たせるために必要です。これにより進捗バーが滑らかに動くように見せる効果があります。

from PIL import Image
import os
from tqdm import tqdm
import time
  • フィールド(メンバ変数)

「input_folder」:変換対象となる画像ファイルが格納されているフォルダのパスです。
「output_folder」:変換後の画像ファイルを保存するためのフォルダのパスです。
「file_list」:入力フォルダ内の変換対象画像ファイルのリストです。
「progress_bar」:tqdmによって生成される進捗バーオブジェクトで、処理の進捗を視覚的に表示するためのものです。
「input_path」:入力画像ファイルの絶対パスです。
「output_path」:変換後のWebP形式の画像ファイルの絶対パスです。

  • convert_to_webp関数

この関数は、指定されたフォルダ内の画像ファイルをWebP形式に変換する処理を行います。

最初に出力フォルダが存在しない場合は新たに作成し、
入力フォルダ内の画像ファイルを拡張子でフィルタリングして取得します。

取得したファイルリストを使って、一つずつ画像ファイルを開き
WebP形式に変換して出力フォルダに保存します。

処理の進捗状況はtqdmで表示し、
全てのファイルが処理されるとメッセージを表示します。

def convert_to_webp(input_folder, output_folder):
    # 出力フォルダが存在しない場合は作成する
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # フォルダ内のファイルを取得する
    file_list = [f for f in os.listdir(input_folder) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp'))]

    # ファイル数が0の場合、処理を終了
    if not file_list:
        print("画像ファイルが見つかりませんでした。")
        return

    # tqdmで進捗バーを作成
    progress_bar = tqdm(total=len(file_list), desc="変換中", unit="file", smoothing=0.1)

    for file_name in file_list:
        # ファイルの絶対パスを取得する
        input_path = os.path.join(input_folder, file_name)
        output_path = os.path.join(output_folder, os.path.splitext(file_name)[0] + '.webp')

        # 画像を開いてWebP形式で保存する
        try:
            with Image.open(input_path) as image:
                image.save(output_path, 'webp')
        except Exception as e:
            print(f"エラー: {file_name} ({e})")

        # 進捗バーを更新
        progress_bar.update(1)
        time.sleep(0.01)  # 流れる感覚を持たせるための微小な遅延

    progress_bar.close()
    print("全ての画像の変換が完了しました!")

# フォルダのパスを指定して変換を実行する
input_folder = 'Input'
output_folder = 'Output'

convert_to_webp(input_folder, output_folder)

UdemyでPythonを学習

Udemyは、オンデマンド式の学習講座です。
趣味から実務まで使えるおすすめの講座を紹介します。




実演

プログラムを実行すると、冒頭で示したような進捗バーが表示されます。

本記事での例では、画像変換なのであまり進捗バーの役割を成さないですが、
動画や人工知能などの大きいデータを扱う場合は進捗バーがあるとプログラムが動いているのか把握できます。

必要に応じて、プログレスバーを導入してください。

まとめ

本記事では、Pythonで進捗バーを作成するためのライブラリ、tqdmの使い方を解説しました。

既存のスクリプトにtqdmを実装することで、処理の進捗を視覚的に確認しながら、
効率的に作業を進めることが可能になります。

tqdmを使うことで、従来の処理に比べてよりユーザーフレンドリーな体験を提供し、
開発者は実行中の処理を可視化しやすくなり、デバッグや評価時の助けにもなります。

次回の開発では、さらに複雑な処理にもこの進捗表示を実装して、便利さを向上させていきましょう。

Udemyで学習する

この記事を書いた人

プロフィール

アリッシア

                 

大学4年間で何か胸を張れるスキルを身に着けたくて当サイト運営を始めました。
現在、大学院に進学するか就職するか迷いながら勉強しています。
詳しいプロフィールはこちら

Contact icon

contact

X icon

X

Instagram icon

Instagram

Note icon

Note

スポンサーリンク
Python
フォローする
タイトルとURLをコピーしました