为什么不';当Python说有两条换行时,不是有两条换行吗?

为什么不';当Python说有两条换行时,不是有两条换行吗?,python,python-2.7,tomcat7,hexdump,Python,Python 2.7,Tomcat7,Hexdump,我从web API中获取了一些文本,试图使用Python在双换行符上拆分段落让我感到困惑 以下是这篇引人入胜的文章的最小样本: >>> print my_string e N 看起来有两行新行,Python同意: >>> print my_string.count('\n') 2 试图用另一个分隔符替换换行符。我期待着eaaN: >>> print my_string.replace('\n', 'a') aN 奇怪。以下是十六进制文

我从web API中获取了一些文本,试图使用Python在双换行符上拆分段落让我感到困惑

以下是这篇引人入胜的文章的最小样本:

>>> print my_string
e

N
看起来有两行新行,Python同意:

>>> print my_string.count('\n')
2
试图用另一个分隔符替换换行符。我期待着
eaaN

>>> print my_string.replace('\n', 'a')
aN
奇怪。以下是十六进制文本:

87654321  0011 2233 4455 6677 8899 aabb ccdd eedff  0123456789abcdef
00000000: 650a 0a4e                                 e..N
我不太熟悉十六进制,但我看到了两个
0a
字符,没有其他控制字符(所以没有CRLF的怪癖)

文本或Python对它们的解释中是否有我遗漏的东西

作为控件,我在Idle中键入了相同的字符串,并尝试了相同的函数:

my_string = """e

N"""
>>> my_string.count('\n')
2
>>> my_string.replace('\n', 'a')
'eaaN'
web API是Tomcat的JMX接口。下面是我用来查询API的路径(我知道它是URI转义的,但没关系):

多谢各位

解决方案

它们是CRLF的:

>>> print repr(my_string)
'e\r\n\r\nN'

我欺骗了自己,将文本从解释器“复制粘贴”到Emacs,在那里我进行了十六进制分析。写入一个文件,然后在Emacs中打开显示了我的错误。

repr(my_string)是什么样子?使用
repr(my_string)
让Python向您展示一个字符串表示,其中新行显示为转义序列。您是如何获得十六进制转储的?在文本模式下处理文件时,Python会将换行符从本机行结尾转换为本机行结尾,因此您可能无意中在某个地方销毁了证据。@MartijnPieters看起来像
Python whatever | xxd
使用
print(my_string)
,或者在解释器提示中,只要
my_字符串
也会回显
repr()
结果。:-)
>>> print repr(my_string)
'e\r\n\r\nN'