进度条Python

时间:2018-05-16 20:00:38

标签: python progress-bar

我有以下代码:

def progressbar(count, total, status=""):
    bar_len = 40
    filled_len = int(round(bar_len * count / float(total)))

    percents = round(100.1 * count / float(total), 1)
    bar = "X" * filled_len + "-" * (bar_len - filled_len)

    print("[{}] {}{} ...{}".format(bar, percents, "%", status),
          end="\r", flush=True)

要调用进度条:

total = 100
i = 0
while i < total:
    i += 1
    progressbar(i, total, status="Creating stuff")
    time.sleep(1)

其中total是迭代次数。当我运行此代码时,我得到的进度条在多行而不是一行上运行。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我认为您的代码中没有任何问题。

print("[{}] {}{} ...{}".format(bar, percents, "%", status),
          **end="\r"**, flush=True)

print()方法中的end =“\ n”参数应该在一行打印进度条。

如果您在终端中运行此代码,它应该可以正常工作。

我之前看到过PyCharm IDE的问题,其中end =“\ r”不起作用。它可能是IDE中终端仿真器中的一个错误。

答案 1 :(得分:0)

感谢所有评论我的主题的人试图提供帮助。我在另一个StackOverflow问题上得到了解决方案:Python 3 progress bar shows nothing

所以我测试了两种成功的方法。第一个,使用sys.stdout进行打印:

sys.stdout.write("\r[{}] {}{} ...{}".format(bar, percents, "%", status))
sys.stdout.flush()

第二个,使用print()但在行前面使用\ r:

print("\r[{}] {}{} ...{}".format(bar, percents, "%", status),
      end="", flush=True)

两者都很完美。第一个需要import sys。