下载脚本进度百分比显示反向,如何实现初始0%完成时100%?
解决进度百分比反向的问题
很明显你这里的问题出在进度百分比的计算逻辑上——你现在用的是剩余未下载的MB数除以总MB数,所以一开始剩余25MB的时候显示100%,下载完剩余0MB时显示0%,完全反过来了。
要改成从0%到100%的正向进度,只需要把计算逻辑换成已完成的MB数除以总MB数就行,有两种简单的修改方式:
方法一:基于已完成的次数计算
因为你每次循环t都会加1,刚好对应已下载的MB数(每次下载1MB),所以可以直接用t来计算:
import time x = 25 y = x t = 0 downloading = True while downloading: time.sleep(1) t += 1 x -= 1 # 改为用已完成的t除以总y计算进度 f = ((t/y) * 100) print('Time:', str(t) + ',', 'Progress: ', '{0:.2f}%'.format(f), 'Remaining: ' + str(x), 'MB', end="\r") if(x == 0): print('\nComplete!') break
方法二:基于剩余量反推已完成量
如果不想依赖t,也可以用总MB数减去剩余MB数来得到已完成量:
import time x = 25 y = x t = 0 downloading = True while downloading: time.sleep(1) t += 1 x -= 1 # 用总y减去剩余x,得到已完成量后计算比例 f = (((y - x)/y) * 100) print('Time:', str(t) + ',', 'Progress: ', '{0:.2f}%'.format(f), 'Remaining: ' + str(x), 'MB', end="\r") if(x == 0): print('\nComplete!') break
另外我把原代码里的'{0:.2}'.format(str(f))改成了'{0:.2f}%'.format(f),这样格式化出来的百分比会更规范(比如显示52.00%而不是5.2e+01%),如果你偏好保留两位有效数字,也可以改回'{0:.2}'.format(f),不需要先把f转成字符串再格式化。
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

