我想使用Python模块进度条。
在我的情况下,我想在大型列表中搜索一个单词。这有效。所以我认为进度条会很好。我导入了模块并尝试了它:
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()
但是有一个问题..进度条停在0%。当整个循环结束时它会跳到100%。为什么?!我不明白。
提前谢谢:)!
答案 0 :(得分:0)
我怀疑你一次试图将计时器增加10%。但是,你有一个小错误。从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)
。然后,您从该文件中读取所有项目。实际上,您从文件中的当前位置开始,逐行读取,直到文件中没有其他行。
下一次迭代,您更新进度条:timer.update(1)
。然后,您从文件中读取所有项目,从文件描述符指向的位置开始,即在文件的末尾。从文件末尾到文件末尾的读取完全没有时间,因此您可以立即拨打timer.update(2)
,一直到最后。
您为进度条任意选择了10个步骤,我怀疑这与f
中的行数无关。如果您知道f
中的行数,则可以在每次迭代或每1000次迭代(if i % 1000 == 0:
)中更新进度条。如果不这样做,你必须弄清楚到目前为止你读过多少字节(例如通过计算你读取的行的长度),然后查看文件的大小,并将这些数字用作进度条的基础。