1. Progress ライブラリのインストール
Progress はサードパーティの Python ライブラリであり、ターミナルで pip コマンドを実行してインストールします。
pip install progress
2. プログレスプログレスバーの効果表示
公式サイトでは、以下のアニメーションのように、プログレスによって得られるさまざまなプログレスバーの効果を確認できます。
# coding=utf-8 from progress.bar import Bar import time # 创建Bar类的实例 bar = Bar('MyProcess:', max=100) # 循环处理某业务,调用bar对象的next()方法,循环次数等于max for _ in range(100): # Do some work time.sleep(0.05) bar.next() # 循环完成后调用finish()方法 bar.finish()
実行中の効果:
進行状況ライブラリを使用して、プログレスバーの実装 非常に簡単です プログレスライブラリの bar.py から Bar クラスをインポートしてオブジェクトをインスタンス化し、ループで業務を処理して next() メソッドを呼び出します 処理が完了したら、finish を呼び出します() メソッドを使用してプログレスバーを終了します。
Bar クラスの主なパラメータは次のとおりです:
message: プログレス バーによって表示されるメッセージこのパラメータは、デフォルトで位置パラメータを使用して Bar に渡すことができます。
width: 進行状況バーの幅を変更します。デフォルトは 32 です。
max: 進行状況バーは、100 などのいくつかの等しい部分に分割されます。
サフィックス: 進行状況のパーセンテージを表示する形式。デフォルトは ‘%(index)d/%(max)d’ です。
fill: 進行状況バーを埋めるために使用するもの。デフォルトは ’#’ です。
empty_fill: アンロードされた進行状況バーを埋めるために使用するもの。デフォルトのスペースは ’ ’ です。
bar_prefix: 進行状況バーのプレフィックス、デフォルト|’。
bar_suffix: 進行状況バーのサフィックス、デフォルト’| ’。
color: プログレスバーの色、デフォルトはなし。
ほとんどの Python プログラマは PyCharm を使用しています。PyCharm でプログレス バー コードを実行した後にプログレス バーの効果が表示されない場合は、次の手順を実行できます。以下の手順に従ってセットアップし、コードを再度実行します。
Step1. PyCharm の上の [実行] ボタンをクリックし、[構成の編集] をクリックして実行構成ページに入ります。
Step2. [出力コンソールでターミナルをエミュレートする] オプションをオンにして、コードを再実行します。
注意深い友人なら、PyCharm で上記の進行状況バーコードが完了した後、進行状況バーの下に奇妙な文字列があることに気づいたはずです: ‘?[?25h&rsquo ; 、スクリプト モード python progress_demo.py を使用してターミナルで同じコードを実行すると、そのような記号の文字列は表示されません。
この文字列はカーソルを表しており、PyCharm で実行するとコンソールにカーソルが出力されます。解決策は、Ctrl キーを押しながらインポートされた Bar クラス名をクリックし、ソース コード bar.py にジャンプしてから、Ctrl キーを押したまま Bar クラスによって継承された Progress クラスをクリックし、__init__.py を入力することです。このファイルの SHOW_CURSOR 変数は空の文字列に変更されます。
#ソースコードを修正して再実行すると、カーソルが表示されなくなり、文字列も表示されなくなります。
PyChram で進行状況バーを実行すると、他の表示の問題も発生する可能性があります。問題が発生した場合は、スクリプトで実行することをお勧めします。スクリプトの実行結果PyChram での実行は、コードをデバッグするためにのみ使用されます。
1. コンテキスト マネージャー: … として … コンテキスト マネージャーを使用してプログレス バーを記述する、プログレス バーがあります。終了時にfinish()メソッドを呼び出す必要はありません。
with Bar('Processing', max=20) as bar: for i in range(20): time.sleep(0.05) bar.next()
2. iter() メソッドを使用します: iter() メソッドを使用すると、next() メソッドを呼び出さずに反復子の作業を簡素化できます。
for i in Bar('Processing').iter(range(100)): time.sleep(0.05)
これら 2 つの実装メソッドの実行結果は、元の実装メソッドと同じです。
1. バー シリーズ
前の記事では、プログレス バーのソース コードをクリックすると、次のことができます。 Bar クラスの継承を参照してください Progress クラスから Infinite クラスを継承し、Progress クラスと Infinite クラスはプログレス バーの基本機能を実装します。
bar.py には、Bar クラスに加えて、ChargingBar、FillingSquaresBar、FillingCirclesBar、IncrementalBar、PixelBar、ShadyBar の 6 つのクラスがあり、Bar クラスのサブクラスまたは孫クラスであり、プログレス バーを継承しています。この関数は各クラスの変数 suffix、fill、empty_fill、bar_prefix、bar_suffix の値を変更するだけで、プログレス バーのスタイルを変更します。
使い方は非常に簡単で、これらのクラスをインポートし、上記のコードの Bar をこれらのクラス (FillingSquaresBar など) に置き換えるだけです。
from progress.bar import Bar, ChargingBar, FillingSquaresBar, FillingCirclesBar, IncrementalBar, PixelBar, ShadyBar import time bar = FillingSquaresBar('MyProcess:', max=100) for i in range(100): time.sleep(0.05) bar.next() bar.finish()
運用効果:
还可以自己修改上面的参数,设置个性化的进度条,本文暂不扩展,以后有空可以专门写文章介绍。
2. Spinner 系列
progress 库的 spinner.py 中实现了 5 个类,Spinner, PieSpinner, MoonSpinner, LineSpinner, PixelSpinner。
from progress.spinner import Spinner, PieSpinner, MoonSpinner, LineSpinner, PixelSpinner for i in Spinner('MySpinner:').iter(range(100)): time.sleep(0.01)
运行效果:
3.Counter 系列
progress 库的 counter.py 中实现了 4 个类,Counter, Countdown, Stack, Pie。
from progress.counter import Counter, Countdown, Stack, Pie import time for i in Counter('Loading:').iter(range(100)): time.sleep(0.01)
运行效果:
接下来将上面介绍的所有种类的进度条全部放到一起,代码如下:
from progress.bar import Bar, ChargingBar, FillingSquaresBar, \ FillingCirclesBar, IncrementalBar, PixelBar, ShadyBar from progress.spinner import Spinner, PieSpinner, MoonSpinner, LineSpinner, PixelSpinner from progress.counter import Counter, Countdown, Stack, Pie import time import random progess_list = [Bar, ChargingBar, FillingSquaresBar, FillingCirclesBar, IncrementalBar, PixelBar, ShadyBar, Spinner, PieSpinner, MoonSpinner, LineSpinner, PixelSpinner, Counter, Countdown, Stack, Pie] for P in progess_list: for i in P(P.__name__ + ':').iter(range(100)): time.sleep(0.01) bar = IncrementalBar('Random:', suffix='%(index)d%%') for i in range(100): bar.goto(random.randint(0, 100)) time.sleep(0.01) bar.finish()
运行效果:
运行代码后可以得出所有种类的进度条,与文章开头从官网截的图效果相同。
以上がPython でプログレス ライブラリを使用してプログレス バーを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。