2016-12-12 7 views
0

私はPythonモジュールのプログレスバーを使用したいと思います。Python Progressbarが更新されていますか?

私の場合、大きなリストの単語を検索したいのですが。これは機能します。だから私はプログレスバーがいいと思った。私は、モジュールをインポートして、それを試してみた:

path = str(raw_input(PATH)) 
word = str(raw_input(WORD)) 
widgets = ['Suche Wort: ', pb.Percentage(), ' ', 
      pb.Bar(marker=pb.RotatingMarker()), ' ', pb.ETA()] 
timer = pb.ProgressBar(widgets=widgets, maxval=10).start() 
loc = -1 

with open(path) as f: 
    for n in range(0,10): 
     timer.update(n) 
     for i, line in enumerate(f): 
      if word in line: 
       timer.update(n) 
       loc = i 
       break 
    timer.finish() 

をしかし、問題全体のループは、それが100%にジャンプ終了する.When ..プログレスバーが0%で停止があります。なぜ?!私はそれを理解していない。

ありがとうございます:)!

答えて

0

私はあなたが一度に10%ずつタイマーを増やそうとしていると思う。あなたは小さなエラーが1つあります。 fからの読み取りとタイマーを更新するときの間の順序。

with open(path) as f: 
    for n in range(0,10): 
     timer.update(n) 
     for i, line in enumerate(f): 
      ... 
    timer.finish() 

ループが初めて実行されるときは、timer.update(0)と呼び出します。次に、ファイルからすべての項目を読み取ります。実際には、ファイルの現在の位置から開始し、ファイルに行がなくなるまで1行ずつ読み込みます。

次の反復では、プログレスバー:timer.update(1)を更新します。次に、ファイルディスクリプタが指している場所、つまりからファイルの末尾にあるすべての項目を読み取ります。。ファイルの終わりからファイルの最後までを読むのは時間がかかりませんので、最後まで最後までtimer.update(2)と呼んでください。

プログレスバーには任意に10ステップが選択されていますが、これはfの行数に関係しないと思われます。 fの行数がわかっている場合は、各反復で、または1000回の反復ごとに進捗バーを更新することができます(if i % 1000 == 0:)。そうしないと、あなたが今までに読み込んだバイト数を調べ(例えば、読み込んだ行の長さを数えて)、ファイルの大きさを調べ、それらの数値を進行状況バーの基準。

関連する問題