我正在编写一个程序,该程序应该下载大的tar文件(1.5 GB),对于小文件来说下载成功,可以通过下载进行检查。但是对于大文件,这将需要等待相当长的时间。如何跟踪此文件的下载过程?
directory = os.getcwd()
path = directory + '/europarl.tgz'
print(directory)
print(path)
if "europarl.tgz" in os.listdir(directory):
print("yep")
else:
print("nope")
urlretrieve.content('http://www.statmt.org/europarl/v7/europarl.tgz', path)
print("yep")
答案 0 :(得分:0)
您可以将第三个参数传递给urlretrieve
,称为reporthook
。它必须是一个接受3个数字参数的函数:一个chunk
数字,block size
和total size of the download
(如果未知,则为-1)。
有关更多信息,请咨询this。该函数可能看起来像这样:
def reporthook(chunk_n, block_size, download_size):
global start_time
if chunk_n == 0:
start_time = time.time()
return
duration = time.time() - start_time
progress_size = int(chunk_n * block_size)
speed = int(progress_size / (1024 * duration))
percent = int(chunk_n * block_size * 100 / download_size)
sys.stdout.write("\r...%d%%, %d MB, %d KB/s, %d seconds passed" %
(percent, progress_size / (1024 * 1024), speed, duration))
sys.stdout.flush()
if __name__ == '__main__':
urllib.urlretrieve(url, filename, reporthook)
您还可以检查显示进度条的软件包tqdm
。