Python - 每次更新都会获得进度条的新打印

时间:2017-12-05 10:00:17

标签: python progress-bar

我是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

提前感谢你提出的任何意见。

1 个答案:

答案 0 :(得分:1)

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