PythonがConsoleの下にテキストの進捗バーを表示する方法

2367 ワード

プログレスバーの実現原理
進捗バーと一般的なprintの違いはどこですか?答えはprintが\n、すなわち改行を出力することで、カーソルが次の行の先頭に移動し、出力されます.前にstdoutで出力されたものは依然として残っています.そして、下に最新の出力結果が表示されることを保証します.進捗バーさもないと、彼が進捗バーであることを保証するには、その場で出力しなければなりません.そうしないと、改行したらどうやって進捗バーと呼ばれますか.プログレスバーを実現する最も簡単な方法は、出力が終わった後、カーソルを行頭に移動し、そこでより長いプログレスバーを出力し続けることで実現でき、新しいより長いプログレスバーは古い短いカバーを形成し、アニメーション効果を形成します.
時間のかかるタスクをPythonで処理する場合、タスクの現在の処理の進捗状況を把握したい場合が多く、この場合、タスクにタスクの進捗情報を印刷し続ける必要があります.一般的に私たちはこうです.
def process_mission():「」「タスク処理方法」「」ここではタスク処理プロセスprint('現在[%d]項目'%countまで処理)#ここではタスク処理プロセス
この方法では、ウィンドウに次のような情報が出力されます.
第1項現在処理から第2項現在処理から第3項現在処理から第4項現在処理から第5項まで…
このような情報は非常に長い可能性があり、出力時に非常に速く、まったくはっきり見えない可能性があります(出力が非常に速い場合).
この時、私たちはこのような機能を期待しています.
[================== ] 25.60%
しかし、printを純粋に使うと効果が得られず、前と同じようにフルスクリーンでこのような鉄棒になります.
進捗バーを正しく表示するにはどうすればいいですか?
Pythonは、progressbarというモジュールを提供しています.このモジュールを使用すると、進捗状況を表示するには、次のようにします.

import progressbar
#         
# http://blog.useasp.net/
pbar = progressbar.ProgressBar(maxval=100, \
widgets=[progressbar.Bar('=', '[', ']'), ' ', \
progressbar.Percentage()])
for i in xrange(100):
#      
pbar.update(i+1)
pbar.finish()

Ok、これで終わります.
進捗バーの表示は簡単に完了しますか?残念なことに、このpythonモジュールはデフォルトではなく、インストールする必要があります.
pip install progressbar
pipがインストールされていない場合は、ここを参照してください.
簡単な進捗バーを持っている人にとって、pythonパッケージをインストールするのは少し動きが大きいようですが、自分で書いてください.
以下はMitchellが自分で書いたような進捗バーで、パッケージをインストールする必要がなく、簡単で使いやすいです.

#         ,     import
# from __future__ import division
# import math
# import sys
# ##blog.useasp.net##
def progressbar(cur, total):
percent = '{:.2%}'.format(cur / total)
sys.stdout.write('\r')
sys.stdout.write("[%-50s] %s" % (
'=' * int(math.floor(cur * 50 / total)),
percent))
sys.stdout.flush()

説明:
Cur,total:1つは現在の値で、1つは総額です.Curは,タスクの処理中にtotalに近づき,両者が等しくなるまでタスクが終了する.
注意すべきは、この2つは整数である可能性があるため、divisionを導入することです.
使用する場合はprogressbarを呼び出すだけでコンソールに進捗バーを出力できます.

#       
progressbar(2, 100)
progressbar(3.9, 10)
progressbar(3283, 27379)

これで、コンソールで動的に更新される進捗バーを完了しました.
以上、編集者さんがご紹介したPythonがコンソールの下にテキストの進捗バーを表示する方法について、お役に立てばと思います.