Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python 3中使用\b_Python_Python 3.x_Backspace - Fatal编程技术网

在Python 3中使用\b

在Python 3中使用\b,python,python-3.x,backspace,Python,Python 3.x,Backspace,我在另一个问题中看到(“\b”)可以用来删除字符。但是,当我尝试\b时,它只在我打算删除的字符和之后的字符之间留出了一个空格。还有其他方法可以退格吗 (我正在尝试制作一个程序,该程序将写入一个单词,删除它,然后重写一个新单词)'\b'仅在打印到终端时删除(不一定是所有终端,尽管通用*NIX shell和cmd.exe应该可以工作)。如果输出到一个文件(或终端以外的任何地方),它将插入文本ASCII退格字符 如果您正在向终端以外的任何地方写入,撤消最近写入的内容的最简单方法是查找返回并截断不需要的

我在另一个问题中看到(
“\b”
)可以用来删除字符。但是,当我尝试
\b
时,它只在我打算删除的字符和之后的字符之间留出了一个空格。还有其他方法可以退格吗


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

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

如果您正在向终端以外的任何地方写入,撤消最近写入的内容的最简单方法是
查找
返回并截断不需要的位,例如:

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
您可以根据是否要输出到终端,在写入Backspace和执行seek和truncate之间切换;类似文件的对象在连接到终端时返回
True
,否则返回
False


当然,如果您没有连接到终端,也没有写入可查找的介质(例如,将您的程序传输到另一个程序),那么您就卡住了。一旦你写了,它就完成了,在一般情况下你就不能撤销它(有一些涉及缓冲的异常,但它们是脆弱的,不值得覆盖)。

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

print('Text: ABC\b\b\bXYZ')
在PyCharm的交互控制台中提供:

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

Text: XYZ

此处对此进行了更详细的解释:

视情况而定。“\b”删除字符,但取决于打印位置。你有一个例子吗?如果它是在shell中执行的,我会用什么来退格呢?