使用while循环计算百分比时的怪癖
我正在尝试做一个简单的百分比计数器,代码如下:
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 个回答
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)