我正在製作一個程序下載一個大文件,並且我添加了一個功能,程序確定下載了多少百分比,並在每次下載另一個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