移除和替换印刷品[重复]

Posted

技术标签:

【中文标题】移除和替换印刷品[重复]【英文标题】:Remove and Replace Printed items [duplicate] 【发布时间】:2011-07-14 13:01:17 【问题描述】:

我想知道是否可以删除您在 Python 中打印的项目 - 不是从 Python GUI,而是从命令提示符。 例如

a = 0  
for x in range (0,3):  
    a = a + 1  
    b = ("Loading" + "." * a)
print (a)

打印出来

>>>Loading   
>>>Loading. 
>>>Loading.. 
>>>Loading...

但是,我的问题是我希望这一切都在一条线上,并且当其他事情出现时它会自行删除它。所以不是打印"Loading", "Loading.", "Loading...,我希望它打印"Loading.",然后它删除行上的内容并用"Loading.."替换它,然后删除"Loading.."并用"Loading..."替换它(在同一行) .这有点难以描述。

p.s 我曾尝试使用 Backspace 字符,但它似乎不起作用 ("\b")

谢谢

【问题讨论】:

a 变量的意义何在?你可以只使用 x 作为你的变量,它会做同样的事情! 两个问题:1.不应该将print()命令缩进到for循环内部的级别吗?目前,您的代码不会打印某种进度,而只会打印最终状态。 2.不应该是print (b)吗?目前只打印整数,而不是问题中提到的"Loading" 【参考方案1】:

只需使用 CR 转到行首。

import time
for x in range (0,5):  
    b = "Loading" + "." * x
    print (b, end="\r")
    time.sleep(1)

【讨论】:

对终端 (IDLE) 有什么想法吗? sys.stdout.write("\033[K") 清除之前的打印 @h0ussni 我不知道那是什么巫术,但效果很好 sys.stdout.write('\033[2K\033[1G') 擦除并转到行首 旁注:要在 jupyter(python3 中)中进行这项工作,请使用:print("\r", b, end="")【参考方案2】:

一种方法是使用ANSI escape sequences:

import sys
import time
for i in range(10):
    print("Loading" + "." * i)
    sys.stdout.write("\033[F") # Cursor up one line
    time.sleep(1)

有时也很有用(例如,如果您打印的内容比以前短):

sys.stdout.write("\033[K") # Clear to the end of line

【讨论】:

在 python 笔记本中不起作用 :( 是否需要使用 sys.stdout.write() ?你可以只做 print("\033[K",end='') 吗? @Trevor 这个答案是为在 Python 2 和 3 中工作而编写的。我知道这个问题被标记为“python-3.x”,但早在 2011 年几乎没有人使用 Python 3,所以我写了一个适用于两个版本的答案。如果您使用的是 Python 3,如果您愿意,可以使用 print(..., end="") 如果你想将光标向上移动 2 行,理论上你能做到 sys.stdout.write("\033[F" * 2) 吗? @madladzen 这应该可以。 ANSI 序列也支持参数,所以你也可以使用sys.stdout.write("\033[2F")【参考方案3】:
import sys
import time

a = 0  
for x in range (0,3):  
    a = a + 1  
    b = ("Loading" + "." * a)
    # \r prints a carriage return first, so `b` is printed on top of the previous line.
    sys.stdout.write('\r'+b)
    time.sleep(0.5)
print (a)

请注意,您可能必须在 sys.stdout.write('\r'+b) 之后立即运行 sys.stdout.flush(),具体取决于您正在执行打印的控制台,以便在请求时打印结果而无需任何缓冲。

【讨论】:

这在 pycharm 的控制台中没有持续抖动的情况下工作。 pycharm的控制台中带有end =“”的打印闪烁很多

以上是关于移除和替换印刷品[重复]的主要内容,如果未能解决你的问题,请参考以下文章

移除和追加 DOM 元素

SQLServer 复制中移除和添加发布而不初始化所有项目

23 Maven工程module的移除和重新导入

CATiledLayer 在 iPad 第 3 代放大时被移除和刷新

Qt; QWidget 移除和删除。 setParent(NULL) 有必要吗?

套准印刷中的值作为不同的数字[重复]