为什么不';当Python说有两条换行时,不是有两条换行吗?
我从web API中获取了一些文本,试图使用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 奇怪。以下是十六进制文
>>> 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'