在打印出内容后覆盖一行

  • 本文关键字:一行 覆盖 打印 python
  • 更新时间 :
  • 英文 :


我试图使一个进度计,计数到100%,但我不能使它取代行,而是它打印出来:0%1%

2%那么我如何只用一行来改变它呢?

这是我的代码:

x = range(101)
for n in x:
timefluc = random.uniform(0, 1.2)
time.sleep(timefluc)
print("{0}%".format(n))

默认情况下,print在打印完所有参数后添加一个换行符'n',将您移动到下一行。传递给它end='r'(回车),使它返回到当前行的开头,而不前进到下一行。要确保输出没有缓冲(stdout在连接到终端时通常是行缓冲的),请确保将flush=True也传递给print,以获得最终结果:

for n in range(101):
timefluc = random.uniform(0, 1.2)
time.sleep(timefluc)
print("{0}%".format(n), end='r', flush=True)

请注意,r不会擦除该行,所以这只会起作用,因为在您的代码中,保证每个新输出至少与前一行一样长(因此将覆盖最后一行的全部数据)。如果您可能先输出长行,然后输出短行,则需要确保在所有输出中填充足够的空格,以匹配或超过最长可能行的长度(不超过终端宽度)。

这取决于您的终端/控制台应用程序,并且没有真正的标准方法,但是您可以尝试打印'回车'字符以进入行首:

x = range(101)
for n in x:
timefluc = random.uniform(0, 1.2)
time.sleep(timefluc)
print("r{0}%".format(n), end='')

注意rend=''参数的用法。
r是回车"end参数阻止print在输出百分比后转到下一行。

你也可以使用{0:3}来格式化,它将使文件保持3个字符长,自动在左边添加空格来填充,这样百分比就不会在你从1%到10%到100%的时候跳跃。

最新更新