我在mac中运行python 3.5.2中的代码。 (pycharm)
当我运行print(" abcz \ rdef")时,我期待得到defz,但我得到了def ... 现在发生了什么?
答案 0 :(得分:2)
ASCII字符 0x0D
又名。 13
又名。 ^M
又名。 \r
:**
首先,它不是Python属性,而是常见的ASCII代码。这意味着几乎所有编程语言都与字符 \r
的行为相同。
请注意单数:def
ONE char。
回车
这就是说,它对应Carriage Return (CR),基本上可以追溯到该行的开头。
在你的情况下你说“plz print abcz 然后回到开始并打印 def ”。 “回到开始”意味着你将覆盖当前行。因此abc
覆盖z
,defz
保持不变,最后为您提供print("a\rb") # => b
print("abcdef\rLOL") #=> LOLdef
#etc...
。
前:
\n
换行符:LF vs CR + LF:
事实是,根据您的操作系统,换行的处理方式不完全相同。大多数操作系统将使用单个\r\n
作为换行符,而Windows使用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.
会导致奇怪的问题(请参阅下面的示例)。
引用wikipedia:
\n
常见问题:
我想最常见的问题是在Linux上逐行读取Windows文本文件。作为一个Linux开发人员,你会期望一行以\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
在上面的示例中,如果l2
来自Windows,则只会看到l1
已打印。 (事实上它已被覆盖,因此如果l2
超过l2
,您会看到l1
+ for i in range(100000):
print("\r%d" % i, end="")
的结尾
<强>例:强> 一个非常酷的例子是让计数器增加数字而不打印新行,试试这个:
pltrdy
xcrun atos -o MYAPP.app/MYAPP -arch arm64 -l 0x1000f4000 0x00000001002162c8
答案 1 :(得分:0)
感谢您回答我的问题。当我尝试你的例子时: (print(“a \ rb”)#=&gt; b print(“abcdef \ rLOL”)#=&gt; LOLdef
我还有b和LOL的答案.... 我不知道为什么会一直发生...... 我顺便使用pycharm ...让我知道我是如何解决的......