我正在制作一个程序下载一个大文件,并且我添加了一个功能,程序确定下载了多少百分比,并在每次下载另一个10%的时间并在什么时间通知用户(即print (str(percent) + " downloaded at " + str(time))
)然而,当我在小文件上测试程序时,我注意到它的准确性不够准确。这里是我做的一个示例程序:Urllib进度不准确?
import urllib.request
def printout(a, b, c):
print(str(a) + ", " + str(b) + ", " + str(c))
urllib.request.urlretrieve("http://downloadcenter.mcafee.com/products/tools/foundstone/fport.zip", r"C:\Users\Username\Downloads\fport.zip", reporthook = printout)
这下载Fport,我正要下载的工具。无论如何,我得到这个输出:
0, 8192, 57843
1, 8192, 57843
2, 8192, 57843
3, 8192, 57843
4, 8192, 57843
5, 8192, 57843
6, 8192, 57843
7, 8192, 57843
8, 8192, 57843
我认为这正是我想要的。当我注意到一个小错误时,我正准备放入。 8192不进入57843.不是8次。我把它插入计算器,发现它实际上大约有7次。考虑到这是一个相当大的差异。这种断开连接影响更大的文件,但它仍然存在。这是一些元数据或头?如果是这样,它相当大,不是吗?有没有办法解释它(即它是否总是大约16000字节)?
作为一个边请注意,您为什么首先使用传统界面? – abarnert
@abarnert不知道你的意思是传统的界面......你的意思是'urllib'而不是'urllib2'? – KnightOfNi
不,我的意思是'urllib.request.urlretrieve',它只记录为[legacy interface]的一部分(http://docs.python.org/3/library/urllib.request.html#legacy-interface) ,“在将来某个时候可能会被弃用”。 – abarnert