在 Python 3 中使用 \b

Using \b in Python 3

我在另一个问题中看到,("\b")可以用来删除一个字符。但是,当我尝试 \b 时,它只会在我打算删除的字符和后面的字符之间放置一个 space 。有没有其他方法可以返回space?

(我正在尝试制作一个程序,它会写一个单词,删除它然后重写一个新的)

'\b' 仅在打印到终端时删除(不一定是所有终端,尽管常见的 *NIX shell 和 cmd.exe 应该有效)。如果输出到文件(或终端以外的任何其他地方),它将插入文字 ASCII 退格字符。

如果您正在写任何东西而不是终端,撤消您最近写的内容的最简单方法是 seek 返回并截断您不想要的位,例如:

import io

with open(filename, 'wb') as f:
    ... Do stuff ...
    f.write(b'abcdefg')
    ... Do other stuff that doesn't write to the file ...
    # Oh no, it shouldn't be abcdefg, I want xyz
    f.seek(-len(b'abcdefg'), io.SEEK_CUR)  # Seek back before bit you just wrote
    f.truncate()  # Remove everything beyond the current file offset
    f.write(b'xyz')  # Write what you really want

您可以根据是否输出到终端,在写退格键和进行搜索和截断之间切换;类文件对象在连接到终端时具有 .isatty() method returns True,否则 False

当然,如果您没有连接到终端,也没有写入可搜索的媒体(例如,将您的程序传送到另一个程序),那么您就被卡住了。一旦你写完,它就完成了,在一般情况下你不能撤消它(有涉及缓冲的例外,但它们是片状的,不值得覆盖)。

这取决于所使用的终端以及它如何解释 \b,例如

print('Text: ABC\b\b\bXYZ')

在 PyCharm 的交互式控制台中给出:

Text: ABC   XYZ

但在命令行中执行 (cmd.exe) 它给出:

Text: XYZ

这里有更详细的解释: