Quirk用while循环计算百分比

时间:2012-02-07 19:23:00

标签: python

我正在尝试快速百分比计数器,如下所示:

percentage = 1
while chunk:
    chunk = f.read(size/100)
    read += len(chunk)
    m.update(chunk)
    if size > 500000000:
        print '%s done for %s.'%(percentage, name)
        percentage += 1

这会返回102个打印语句,[1,102],而不是我想要做的,[1,100]。这样做的原因似乎是它在第一次迭代(0次读取)和最后一次迭代(100%读取)时进行了打印语句。解决这个问题的最简单方法是什么?

1 个答案:

答案 0 :(得分:7)

不,这不是一个简单的逐个错误。

假设文件长度为199个字节。每次迭代将读取size/100个字节,即一个字节。因此,循环将执行199次,“百分比”将介于1到199之间。

鉴于你只打印出大文件的百分比,你实际上看不到高达199的数字。尽管如此,逻辑仍然存在缺陷,正如你已经观察到的那样。

更好的方法是删除percentage变量并改为使用直接计算:

while chunk:
    chunk = f.read(size/100)
    read += len(chunk)
    m.update(chunk)
    if size > 500000000:
        print '%s done for %s.'%(100.0 * read / size, name)