/> 忍者ブログ

WEEKEND ECONOMIST

小さな工夫と発見の蓄積

プログレスバー・進捗状況を出力する

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

プログレスバー・進捗状況を出力する

Pythonで、コンソールにプログレスバーや進捗状況を出力する方法。

プログラムで膨大な数のファイルを処理したり、巨大なループを回したりするときには、動作確認のために進捗状況をコンソールに表示させている。しかし、単にprintを使うと、どんどん新しい行が追加されて目障りだ。同じ行にとどまって、数字だけが変化していく出力はどうすればできるのか、不思議だったが、その方法がやっと分かった。

ポイント
* 出力には、sys.stdout.write を使う(勝手に改行しない)。
* '\r' を出力することで、行の先頭に戻る(!)。 '\r' は、キャリッジリターンと呼ぶ。
* 逐一flushをする。しないと、出力のタイミングが遅れることがある(らしい)。flushは、強制的に出力させる。トイレの水を流すのと同じflush。
* 本当は progressbarライブラリを利用する方が普通かもしれない。

import sys
from time import sleep

for i in range(1, 21):
    sys.stdout.write('\r[ %-20s %3.0f%% ]' % ('='*i, i*100/20))
    sys.stdout.flush()
    sleep(.1)

import sys
from time import sleep

for i in range(1, 51):
    ch = '-<>'[i % 3] 
    sys.stdout.write('\r%s %3.0f%% done %s' % (ch*10, i*100/50, ch*10))
    sys.stdout.flush()
    sleep(.1)

ちなみに、勝手に改行することだけが printの問題らしく、sys.stdout.writeの代わりに 「print <文字列>,」と末尾にコンマをつけても同じ結果は得られるようだ。しかしそれでもflushは必要なので、sys.stdout.writeを使う方が見栄えがいい。
PR

コメント

プロフィール

HN:
KM
性別:
非公開

カレンダー

03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30