<p>当Python读取文本文件时,行分隔符将从平台默认值转换为<code>\n</code>。在Windows上,行用<code>\r\n</code>分隔,但在Python</em>中,行将以^{<cd1>结尾。</p>
<p>但是,您的硬编码字符串包含<code>\r</code>回车字符,从文件中读取的行不会</p>
<p>如果最后一行没有行分隔符,不管怎样,你都会无条件地删除最后一个字符。使用<code>line.rstrip('\n')</code>删除换行符,但仅当存在时才使用。</p>
<p>每当您认为您有相同的字符串,但Python告诉您一些不同的东西时,请查看这些字符串的<a href="https://docs.python.org/2/library/functions.html#repr" rel="nofollow">^{<cd6>} function</a>的输出(在python3上使用<a href="https://docs.python.org/3/library/functions.html#ascii" rel="nofollow">^{<cd7>}</a>)。您还可以使用<a href="https://docs.python.org/2/library/difflib.html#difflib.ndiff" rel="nofollow">^{<cd8>} function</a>快速获得可能不同的指示。</p>
<p>在您的例子中,<em>似乎</em>没有删除(足够)换行符,而您的测试消息包含<code>\r</code>个字符。这意味着<code>message2</code>文本将逐行替换自己,因为它不会前进到下一行。使用<code>\n</code>;甚至可以使用三重引号的字符串来保留换行符:</p>
<pre><code>message2 = '''\
MSH|^~\&|GHH LAB|ELAB-3|GHH OE|BLDG4|200202150930||ORU^R01|CNTRL-3456|P|2.4
PID|||555-44-4444||EVERYWOMAN^EVE^E^^^^L|JONES|196203520|F|||153 FERNWOOD DR.^^STATESVILLE^OH^35292||(206)3345232|(206)752-121||||AC555444444||67-A4335^OH^20030520
OBR|1|845439^GHH OE|1045813^GHH LAB|1554-5^GLUCOSE|||200202150730||||||||555-55-5555^PRIMARY^PATRICIA P^^^^MD^^LEVEL SEVEN HEALTHCARE, INC.|||||||||F||||||444-44-4444^HIPPOCRATES^HOWARD H^^^^MD
OBX|1|SN|1554-5^GLUCOSE^POST 12H CFST:MCNC:PT:SER/PLAS:QN||^182|mg/dl|70_105|H|||F'''
</code></pre>