如何\ r \n(回车)在Python中工作

use*_*099 4 python python-2.7

操作系统:Windows 7

我的理解是\ r将文本移动到页面的左侧.

但是当我执行这个时:

carriage_return = "I will use a carriage\rreturn"

print carriage_return
Run Code Online (Sandbox Code Playgroud)

我得到了:回来使用马车

我期待的是:回归

Sna*_*fee 7

好吧,看来你确实移动到了线的左边.它刚刚离开了线的其余部分.注意return是6个字符,I will也是6 个字符.


小智 7

\r 转义序列之后的所有字符都向左移动并准确覆盖语句开头的那些字符数。

在您的示例中,return在 \r 之后,它是 5 个字符,它替换了也是 5 个字符的I will(不要忘记包含空格:P),因此它基本上替换了I will使用回车符打印return


See*_*ker 5

\ r将光标移到行首。当您将笔架移至开头并覆盖其中的内容时,其效果与物理打字机相同。

  • 你用过实体打字机吗?当你这样做时会有完全不同的效果...... :) (2认同)
  • 这并不是一个完全严肃的评论。我的意思只是说,如果您在打字机上键入现有文本,该文本不会被新文本替换。(否则我很难在打字机上写出“Ø”)。 (2认同)

Arm*_*est 5

只是为了补充这一点。如果您想返回到开头并删除该行的内容,您可以这样做:

text = "Here's a piece of text I want to overwrite" 
repl = "BALEETED!" # What we want to write
print(text, end="\r") # Write the text and return
print(f'\r{repl: <{len(text)}}')
Run Code Online (Sandbox Code Playgroud)

最后一行可能需要一些解释,所以我将分解它:

f'SOMETHING {var}'是一个 f 字符串,相当于'SOMETHING {}'.format('HERE'). 它在 Python 3.6+ 中可用

因此,替换变量的硬编码值,我们回到开头,然后编写替换字符串,后跟足够的空格来替换原始文本。如果您想使用在这种情况下可能更清楚的旧格式方法:

print('\r{0: <{1}}'.format(repl, len(text)))

# Which becomes when extrapolated:
print('BALEETED                                  ')
Run Code Online (Sandbox Code Playgroud)

对于奖励积分,您不需要使用空格,您可以使用任何东西:

print('\r{0:?<{1}}'.format(repl, len(text)))

# Which becomes when extrapolated:
print('DELETED?????????????????????????????')
Run Code Online (Sandbox Code Playgroud)

或者为了额外的奖励,把它变成一个函数:

from time import sleep
def overprint(text,repl, t=1, char=" "):
    print(text, end="\r")
    sleep(t) 
    print('\r{0:{1}<{2}}'.format(repl, char, len(text)))

overprint("The bomb will explode in one sec...", "BOOM!")
Run Code Online (Sandbox Code Playgroud)