如何让python再次打印成相同的行

时间:2017-06-22 09:11:17

标签: python

让我准确描述一下我在问什么。假设python控制台看起来像这样:

line1
line2
line3
line4
line5
...

现在假设你有一个循环,每次迭代打印成3行。通常它会在第一次迭代中打印到line1,line2和line3,然后在第二次迭代中打印到4,5,6,依此类推。我想让它只打印到第1行,第2行和第3行,同时删除之前在这些行中的内容。

原因是我有很多东西需要打印,之前打印的内容不再重要,所以这样我就不会创建大量的行。

编辑:我认为这不是一个重复的问题,因为这里有更多的问题。我认为清除整个控制台是最简单的解决方案。谢谢你的回答!

3 个答案:

答案 0 :(得分:1)

实现此目标的最佳方法是使用termcap(terminal capabilities

curses模块具备您所需的功能:https://docs.python.org/3.5/library/curses.html#module-curses

或者你可以通过直接打印控制字符和序列,以另一个答案的建议,以更黑客的方式做到这一点。

https://en.wikipedia.org/wiki/ANSI_escape_code

答案 1 :(得分:0)

首先添加"\r"以替换最后一行。中间不应该有任何新行。

Python2:

>>> print("line1"),;print("\rline2")
line2 

Python3:

>>> print("line1", end="");print("\rline2")
line2

"line1"已被"\rline2"覆盖。

答案 2 :(得分:0)

你可以使用ANSI escape code" \ 033 [F",它可以在许多终端中使用:

import time

lines = ['line %d' % n for n in range(10)]

reset_after = 3

for number, line in enumerate(lines):
    if number > 0 and not number % reset_after:
        # if we wrote n lines, we are now on line n+1,
        # so we go up n+1 lines
        print("\033[F" * (reset_after + 1))
    # We must first erase the line where we're about to write,
    # in case our new line is shorter. 
    # "\033[K" erases from the cursor
    print("\033[K" + line)
    time.sleep(0.5)

在我的Linux终端中完美运行。