for url in addresses:
file_name = url.rsplit('/', 1)[-1]
fname_with_path = os.path.join(download_directory, file_name)
attempts = 1
while attempts < 5:
try:
urllib.request.urlretrieve(url, fname_with_path)
print("%-3s %-60s %25s" % ('--', file_name, 'downloaded'), end='')
break
except:
attempts += 1
if attempts > 1 and attempts < 5:
print('tried to download ', file_name, ' attempt:', attempts)
if attempts == 5:
print("%-3s %-60s %25s" % ('--', file_name, 'FAILED'), end='')
pass
这是用于从URL列表下载文件的代码的一部分。由于某些文件足够大,我想知道一个文件的许多KB已下载。例如
file1: 348 / 2980
我也想在同一行上更新进度,而不是这样:
file1: 348 / 2980
file1: 355 / 2980
file1: 389 / 2980
file1: 402 / 2980
答案 0 :(得分:1)
您可以打印出回车符(\ r)以覆盖以前的打印输出: 也可以看看: How do I write output in same place on the console?
答案 1 :(得分:0)
这是在python 3的同一行上打印的方法。
print('text\r', end='', flush=True)
\r
是回车符,将光标移回行的开头
答案 2 :(得分:0)
我确实知道它在c / c ++语言中的表现。只需将\r
放在要保留在同一位置的行的开头,然后在末尾删除\n
。
https://github.com/python/cpython/blob/3.7/Lib/urllib/request.py#L283
在您的情况下,urlretrieve
使用reporthook(blocknum, bs, size)
,您可以根据需要覆盖报告代码,例如,如上所述。