【问题标题】:download percent in python progress bar exceeds 100python进度条下载百分比超过100
【发布时间】:2021-07-28 04:55:42
【问题描述】:

这是下载文件的脚本的一部分。它的问题是downloaded_percent 有时会超过 100。

with open(outputname, 'wb') as DEST:
    chunksize = 8192
    downloaded = 0

    for chunk in SESSION.iter_content(chunk_size=chunksize):
        DEST.write(chunk)
        downloaded += chunksize

        downloaded_percent = (downloaded * 100) / file_size  ## <<< FIXME exceeds 100

        progress_info = {file_size: f'%{downloaded_percent:.2f}'}
        print(progress_info, end='\r')

这是我迄今为止尝试过的:

  1. write 之前使用if 语句,但结果正好相反,即downloaded_percent 永远不会达到100:
if chunk:
    DEST.write(chunk)
    downloaded += chunksize

    downloaded_percent = (downloaded * 100) / file_size  ## <<< FIXME never reaches 100
  1. 使用if 语句将downloaded_percent 设置为100(如果高于该值):
DEST.write(chunk)
downloaded += chunksize

downloaded_percent = (downloaded * 100) / file_size  ## <<< FIXME exceeds 100
if downloaded_percent > 100:
    downloaded_percent = 100

这可以解决问题,但在每次迭代中检查数量似乎并不有效。

我想知道是否有更好的方法。

【问题讨论】:

  • 您是否尝试使用 100. 而不是 100 ?
  • 什么意思?
  • downloaded_percent = (已下载 * 100.) / 文件大小
  • 哦,是的,我刚刚做了,但还是一样(例如,它给出 100.14)。
  • 您能否为“100.14”的情况提供“已下载”和“文件大小”的值?

标签: python progress-bar


【解决方案1】:

你试过了吗:

downloaded_percent = (downloaded / file_size) * 100

假设 file_size 始终 >= downloaded

【讨论】:

  • 这个公式也适用于一个“民意调查”,有 50k 人可以投票。然后第 1 个人获得 3400 票,第 2 个人获得 40999 票,从 50k 票中获得每个人的百分比: guy1 = (3400/50000)*100 = 6.8% 和 guy2 = (40999 /50000)*100 = 81.99% 很棒的公式!!
  • @FreddyDaniel 但这与 Peter Stenger 的没有什么不同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
  • 2019-05-27
  • 1970-01-01
相关资源
最近更新 更多