在Python上动态更改两行

在Python上动态更改两行,python,Python,假设我有一个计数从0到100000的计数器。我不想所有的数字都显示出来,我只想看看我们最终完成的百分比 我知道如果要重写整行,必须在开头添加\r。然而,如果我想在两条线上做这件事,我该怎么做呢 1 0.001% 然后 另外,假设我想为数字添加新行,但始终将百分比保持在底部,如下所示: 1 2 3 4 5 6 7 8 0.008% 你对如何做到这一点有什么想法吗 以下是我目前的代码(显然不起作用): 谢谢大家! 您可以使用模块: 您可以使用curses库,该库的名称(fair warning)

假设我有一个计数从0到100000的计数器。我不想所有的数字都显示出来,我只想看看我们最终完成的百分比

我知道如果要重写整行,必须在开头添加\r。然而,如果我想在两条线上做这件事,我该怎么做呢

1
0.001%
然后

另外,假设我想为数字添加新行,但始终将百分比保持在底部,如下所示:

1
2
3
4
5
6
7
8
0.008%
你对如何做到这一点有什么想法吗

以下是我目前的代码(显然不起作用):

谢谢大家!

您可以使用模块:


您可以使用
curses
库,该库的名称(fair warning)非常贴切。如果您在linux机器上,可以通过打印“UP”字符和回车符在现有行上打印,但这非常依赖于系统。我有一个类似问题的答案
“\033[F”
是up字符。您可能需要完全删除以前的数字。而且即使在windows上,
\n
也可能足够了。
1
2
3
4
5
6
7
8
0.008%
from sys import stdout

for i in range(100000):
    stdout.write(str(i) + '\r\n')
    stdout.write('%.2f' % (i / 100000 * 100) + '%\r')
    stdout.flush()

stdout.write('\n')
import curses

import time
stdscr = curses.initscr()
curses.noecho()
curses.cbreak()


n = 100000
num_lines = 10
lst = list(range(n))
for t in [lst[i:i + num_lines] for i in range(0, len(lst), num_lines)]:
    final_line = f'{t[-1] / n * 100:.4f}%'
    out = '\n'.join(map(str, [*t, final_line]))
    stdscr.addstr(0, 0, out)
    stdscr.refresh()
    time.sleep(0.005)  # you can comment but will be too fast

curses.echo()
curses.nocbreak()
curses.endwin()