【问题标题】:how does \r (carriage return) work in Python [duplicate]\r(回车)在Python中如何工作[重复]
【发布时间】:2013-09-12 14:39:15
【问题描述】:

操作系统:Windows 7

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

但是当我执行此操作时:

carriage_return = "I will use a carriage\rreturn"

print carriage_return

我得到了:使用马车返回

我所期待的是:返回

【问题讨论】:

  • 它只是向左移动,它不会删除行。
  • 你是如何执行这个程序的?空闲,CMD,Pycharm。 @user571099

标签: python python-2.7


【解决方案1】:

嗯,看来您确实移到了该行的左侧。它只是让线路的其余部分保持不变。注意return 是 6 个字符,I will 也是 6 个字符。

【讨论】:

  • 完美!您关于字符数的注释说明了一切
【解决方案2】:

\r 将光标带到行首。 当您将马车移到开头并覆盖那里的任何内容时,效果与物理打字机中的效果相同。

【讨论】:

  • 你用过实体打字机吗?当你这样做时会有完全不同的效果...... :)
  • 你的意思是它向下滚动一行?
  • 这不是一个完全严肃的评论。我只是说,如果您在打字机上输入现有文本,则该文本不会被新文本替换。 (否则我很难在打字机上写Ø)。
【解决方案3】:

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

在您的示例中,return 在 \r 之后,它是 5 个字符,它替换了 I will 这也是 5 个字符(不要忘记包含空格 :P),所以它基本上替换了 I will 并打印 return use a car

【讨论】:

    【解决方案4】:

    只是补充一下。如果你想回到开头并擦除该行的内容,你可以这样做:

    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)}}')
    

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

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

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

    print('\r{0: <{1}}'.format(repl, len(text)))
    
    # Which becomes when extrapolated:
    print('BALEETED                                  ')
    

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

    print('\r{0:░<{1}}'.format(repl, len(text)))
    
    # Which becomes when extrapolated:
    print('DELETED░░░░░░░░░░░░░░░░░░░░░░░░░░░░░')
    

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

    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!")
    

    【讨论】:

      猜你喜欢
      • 2020-12-27
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2015-10-07
      • 1970-01-01
      相关资源
      最近更新 更多