在Python的打印行中删除字符

20
我正在编写一个程序,希望光标能够在同一行上打印字母,并且还要删除它们,就像一个人打字,犯了一个错误,然后回退到错误处,并从那里继续输入一样。
目前我只有在同一行上写字的能力:
import sys, time
write = sys.stdout.write

for c in text:  
    write(c)
    time.sleep(.5)

2
你可能想要查看curses包适用于Unix系统,或者Windows的替代品。我使用过的是msvcrt。如果你只是想在控制台中欺骗用户,那么'\b'字符就可以了。 - jgritty
2
你可以通过将代码向右缩进四个空格(或者复制粘贴后选中代码然后点击代码按钮)来使代码格式更加清晰。 - Niklas B.
这个回答解决了你的问题吗?删除和替换已打印的项目 - Tomato Master
3个回答

29
write('\b')  # <-- backup 1-character

12
+1,您可能想要使用write('\b \b')来达到所需的效果。 - Kimvais
1
我还需要使用 sys.stdout.flush() 以便看到效果。 - eng.mrgh

14

仅为了说明@user590028和@Kimvais所提供的出色答案

sys.stdout.write('\b') # move back the cursor
sys.stdout.write(' ')  # write an empty space to override the
                       # previous written character.
sys.stdout.write('\b') # move back the cursor again.

# Combining all 3 in one shot: 
sys.stdout.write('\b \b')

# In case you want to move cursor one line up. See [1] for more reference.
sys.stdout.write("\033[F")

参考资料
[1] Sven Marnach关于Python删除和替换打印项的答案
[2] 构建进度条的博客文章


6

当您使用print()时,可以将end设置为\r,这将用新文本替换当前行中的文本。

print(text, end="\r")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接