ファイルのダウンロードに使用requests
していますが、大きなファイルの場合、進行状況をパーセンテージで表示できないため、ディスク上のファイルのサイズを毎回確認する必要があり、ダウンロード速度も知りたいです。どうすればそれを行うことができますか?これが私のコードです:
import requests
import sys
import time
import os
def downloadFile(url, directory) :
localFilename = url.split('/')[-1]
r = requests.get(url, stream=True)
start = time.clock()
f = open(directory + '/' + localFilename, 'wb')
for chunk in r.iter_content(chunk_size = 512 * 1024) :
if chunk :
f.write(chunk)
f.flush()
os.fsync(f.fileno())
f.close()
return (time.clock() - start)
def main() :
if len(sys.argv) > 1 :
url = sys.argv[1]
else :
url = raw_input("Enter the URL : ")
directory = raw_input("Where would you want to save the file ?")
time_elapsed = downloadFile(url, directory)
print "Download complete..."
print "Time Elapsed: " + time_elapsed
if __name__ == "__main__" :
main()
それを行う1つの方法は、ループのたびにファイルを読み取り、for
ヘッダーに基づいて進行状況のパーセンテージを計算することだと思いますContent-Length
。しかし、これは大きなファイル (約 500MB) では再び問題になります。それを行う他の方法はありますか?