在 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
这里有更详细的解释:
我在另一个问题中看到,("\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
这里有更详细的解释: