【问题标题】:Python - Getting a new print of progressbar every updatePython - 每次更新都会获得新的进度条打印
【发布时间】:2017-12-05 10:00:16
【问题描述】:

我对 Python 完全陌生,希望在将数据从一个数据库复制到另一个数据库(MongoDB)时显示一个进度条。我想要得到的是一个显示数据库副本到另一个的进度(百分比)的进度条。副本工作得很好,问题在于我的进度条的更新,每个循环都会重新打印。

这是脚本:

    coll_names = db_in.collection_names()
    db_in_size = db_in.command('dbstats')['dataSize']

    bar = progressbar.ProgressBar(max_value=db_in_size).start()
    for X in X_list:        
        for coll in coll_names:
          db_out_size = db_out.command('dbstats')['dataSize']
          bar.update(db_out_size)
          db_out[coll].delete_many({'X': X})
          data_in = db_in[coll].find({'X': X})
          if data_in.count() > 0:
                db_out[coll].insert_many(data_in)
    bar.finish()            

X_list 包含字符串。

这段代码肯定没有优化,也没有格式化显示单个进度条的正确方式,但请多多包涵。

预期结果:Single progressbar on one line

当前结果:One progressbar print for every iteration

当前结果:tqdm

提前感谢您提供的任何意见。

【问题讨论】:

  • 看看tqdm。我个人认为它是最好的进度条。除此之外,任何print() 在循环体中的调用都会使任何进度条库变得混乱。也有可能您的终端根本不支持控制符号。
  • 谢谢。我实际上尝试使用具有类似结果的 tqdm。我会把它添加到我的帖子中。终端是问题所在。

标签: python progress-bar


【解决方案1】:

进度条通过打印“\r”字符(回车)将光标移回行首来工作。只要光标停留在当前行上,它就可以工作。这里可能发生的事情是您正在代码中的其他地方打印一个换行符到 stderr。这实质上意味着回车无效。或者您使用的终端可能不支持回车(显然是某些 IDE)。

【讨论】:

  • 看来这只是一个终端问题,感谢您的快速回答。我在控制台中尝试了 examples.py 并遇到了同样的问题。一直在寻找我的代码中的错误,我的 IDE 的插件兼容性甚至没有想到
猜你喜欢
  • 2018-03-15
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多