【问题标题】:How do I make progress bar while downloading file in python在python中下载文件时如何制作进度条
【发布时间】:2019-11-09 17:21:06
【问题描述】:

我正在使用 tqdm 来监控我的 python 程序中文件的下载,但它没有显示进度条。 我有这个代码:

from tqdm import *
import requests
url = "https://as2.cdn.asset.aparat.com/aparat-video/520055aa72618571e4ce34b434e328b615570838-144p__58945.mp4"
name = "video"
with requests.get(url, stream=True) as r:
    r.raise_for_status()
    with open(name, 'wb') as f:
        for chunk in tqdm(r.iter_content(chunk_size=8192), r.headers.get("content-length")):
            if chunk:  # filter out keep-alive new chunks
                f.write(chunk)
                # f.flush()

但是当我运行它时,它并没有显示进度条,而是显示了这个:

763499: 94it [00:00, 192.31it/s]

我也试过这个代码:

from tqdm import *
import requests
url = "https://as2.cdn.asset.aparat.com/aparat-video/520055aa72618571e4ce34b434e328b615570838-144p__58945.mp4"
name = "asdasdjk"
with requests.get(url, stream=True) as r:
    r.raise_for_status()
    with open(name, 'wb') as f:
        for chunk, bar in r.iter_content(chunk_size=8192), r.headers.get("content-length"),tqdm(range(0,int(r.headers.get("content-length")))):
            if chunk:  # filter out keep-alive new chunks
                f.write(chunk)
                # f.flush()

但它给了我错误:

Exception has occurred: ValueError
too many values to unpack (expected 2)
  File "test.py", line 8, in <module>
    for chunk, bar in r.iter_content(chunk_size=8192), r.headers.get("content-length"),tqdm(range(0,int(r.headers.get("content-length")))):

【问题讨论】:

  • 据我所知,第一个示例中没有显示进度条的代码。你为什么这么期待?
  • @JohnGordon 那么,为什么它不显示任何进度条?如何制作?

标签: python python-3.x python-requests python-3.6 tqdm


【解决方案1】:
from tqdm import *
import requests
url = "https://as2.cdn.asset.aparat.com/aparat-video/520055aa72618571e4ce34b434e328b615570838-144p__58945.mp4"
name = "video"
with requests.get(url, stream=True) as r:
    r.raise_for_status()
    with open(name, 'wb') as f:
        pbar = tqdm(total=int(r.headers['Content-Length']))
        for chunk in r.iter_content(chunk_size=8192):
            if chunk:  # filter out keep-alive new chunks
                f.write(chunk)
                pbar.update(len(chunk))

【讨论】:

  • 哇!感谢您的帮助!但是你能解释一下吗?
  • 您没有正确更新参数。如果您更改您的 for 循环,例如 for chunk in tqdm(r.iter_content(chunk_size= 8192), total=math.ceil(int(r.headers.get("content-length", 0))//8192)),您的相同代码将有效
猜你喜欢
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 2017-11-23
  • 2016-07-30
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多