我有一些从 Web API 获取的文本,这让我试图使用 Python 在双换行符上分割段落感到困惑。
这是有趣文本的最小示例:
>>> print my_string
e
N
看起来像 2 个换行符,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 转义的,但这很好):
manager/jmxproxy?qry=Catalina:j2eeType=WebModule,name=//localhost/*,J2EEApplication=none,J2EEServer=none
谢谢你。
解决方案
它们是 CRLF 的:
>>> print repr(my_string)
'e\r\n\r\nN'
我通过将文本从解释器“复制粘贴”到 Emacs 来欺骗自己,在那里我进行了十六进制分析。写入文件然后在 Emacs 中打开向我展示了我的方式的错误。