在控制台中显示下载进度

时间:2018-08-30 10:57:07

标签: python

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

3 个答案:

答案 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),您可以根据需要覆盖报告代码,例如,如上所述。