'\r' 是什么意思?它是用来做什么的?我之前从未见过它,现在它让我感到很头痛。它似乎没有任何作用,因为 'a\ra' 输出的结果是 'aa',但它与字符串 'aa' 并不相同。我正在使用 Python 2.6。
这是来自打字机时代的一个旧控制字符。
它表示“回车符”,在那个时候,当你按下“回车”键,你会进入下一行,然后打印头(即回车)会移回到该行开头。
随着计算机的出现,不同的操作系统做了不同的选择来表示新行。
在Windows中,你有“\r\n”(回车符+换行符)。
在类UNIX系统中,你只需要使用“\n”(无需回车,新行已经隐含包含回车的意义)。
在旧的Mac OS中,你只有“\r”。
现在,除了用于表示新行(或者我不知道其他用途),它已经不再使用了。
printf("1%%"); fflush(stdout); sleep(1); printf("\r2%%");
第一个 printf 在行末留下光标。 第二个 printf 使用 \r
将光标移回行首,然后用 2%
覆盖 1%
。 - John Kugelman对于我(在Mac OS X 10.5终端应用程序上,Python 2.6.5):
>>> print 'a\ra'
a
>>> print 'longstring\rshort'
shorttring
\r
会将光标“移到行首”(而不启动新的行),因此'short'
会“覆盖”'longstring'
的开头。
这种效果适合在长时间操作期间向用户显示单行“当前状态”的更新 - 使用带有尾随逗号的print '\rupdate'
来避免发出换行符以通过覆盖上一个状态来更新状态。当然,您需要确保每个更新的字符串至少与之前的字符串一样长(只需用空格填充即可)。
请注意,其他回答者已经注意到他们的平台上有不同的视觉效果(您自己也看到了\r
消失而没有效果,这在我的经验中是前所未有的),因此这种提供更新的好方法无法在每个平台上很好地运行!-)
这是回车符的转义字符。在我的Windows控制台上,print 'a\ra'
的结果是...
a
a
...被打印到标准输出(stdout)。
这里是一个所有有效转义字符的列表。
\newline
- 忽略 \\
- 反斜杠 () \'
- 单引号 (') \"
- 双引号 (") \a
- ASCII 响铃符 (BEL) \b
- ASCII 退格符 (BS) \f
- ASCII 换页符 (FF) \n
- ASCII 换行符 (LF) \N{name}
- Unicode 数据库中名称为 name 的字符 (仅限 Unicode) \r
- ASCII 回车符 (CR) \t
- ASCII 水平制表符 (TAB) \uxxxx
- 具有 16 位十六进制值 xxxx 的字符 (仅限 Unicode)\Uxxxxxxxx
- 具有 32 位十六进制值 xxxxxxxx 的字符 (仅限 Unicode)\v
- ASCII 垂直制表符 (VT) \ooo
- 具有八进制值 ooo 的字符\xhh
- 具有十六进制值 hh 的字符print 'a\ra'
只会输出一个单独的a
。因为回车符没有换行符,所以第二个a
会覆盖第一个。 - FogleBirdrepr
是一个很好的论点,并且在可能的情况下尽量避免控制字符。 - Chris B.
subprocessing
模块调用进程时,从stdout读取时会得到一个'\r'
,但在进程内部从stdin读取时则没有。 - Michael David Watson