ASCII 字符 \r aka. 0x0D aka. 13 aka. @987654326 @:**
首先,它不是 Python 属性,而是常见的 ASCII 码。这意味着几乎所有的编程语言对于 字符 \r 的行为都是相同的。
注意单数:\r 是 ONE 字符。
回车
这样说,它对应Carriage Return (CR),基本上是回到了行首。
在您的情况下,您说“请打印 abcz 然后回到开头并打印 def”。 “回到开头”意味着您将覆盖当前行。所以def覆盖abc,z保持原样,最后给你defz。
前:
print("a\rb") # => b
print("abcdef\rLOL") #=> LOLdef
#etc...
换行符:LF vs CR+LF:
事实上,换行符的处理方式并不完全相同,具体取决于您的操作系统。大多数操作系统将使用单个\n 换行,而Windows 使用\r\n,这可能会导致奇怪的问题(参见下面的示例)。
引用wikipedia:
LF: Unix and Unix-like systems (Linux, OS X, FreeBSD, Multics, AIX, Xenix, etc.), BeOS, Amiga, RISC OS, and others[1]
CR+LF: Microsoft Windows, DOS (MS-DOS, PC DOS, etc.), DEC TOPS-10, RT-11, CP/M, MP/M, Atari TOS, OS/2, Symbian OS, Palm OS, Amstrad CPC, and most other early non-Unix and non-IBM OSes
CR: Commodore 8-bit machines, Acorn BBC, ZX Spectrum, TRS-80, Apple II family, Oberon, the classic Mac OS up to version 9, MIT Lisp Machine and OS-9
RS: QNX pre-POSIX implementation
0x9B: Atari 8-bit machines using ATASCII variant of ASCII (155 in decimal)
LF+CR: Acorn BBC and RISC OS spooled text output.
常见问题:
我猜最常见的问题是在 Linux 上逐行读取 Windows 文本文件。作为一名 Linux 开发人员,您会期望行以 \n 结尾,并且假设您想要连接句子,您将只删除 \n 并在其中留下危险的 \r。
示例:我们想要连接两个文件中的每个句子。
# Open our two files
fn1="file1.txt"
fn2="file2.txt"
f1=open(fn1, 'r')
f2=open(fn2, 'r')
while True:
# Read 1 line in each
l1 = f1.readline()
l2 = f2.readline()
# Check lines are not empty, or break
if not l1 or not l2:
break
# Remove new lines
l1 = l1.replace('\n', '')
l2 = l2.replace('\n', '')
# Print the result
print("%s %s" % (l1, l2))
在上面的例子中,如果l1 来自Windows,你只会看到l2 被打印出来。 (实际上它被覆盖了,所以如果l1 比l2 更长,你会看到l2+ l1 的结尾)
示例:
一个很酷的例子是让计数器增加一个数字而不打印新行,试试这个:
for i in range(100000):
print("\r%d" % i, end="")
pltrdy