我又开始用python编写代码了,我偶然发现了一个奇怪的行为:我有两个完全相同的字符串(参见下面的代码),但其中一个字符串存储在文件中,另一个是硬编码的。现在我的程序正在运行,但是文件中的字符串与硬编码字符串在输出中看起来完全不同。为什么?在
import sys
message = ''
message2 = 'MSH|^~\&|GHH LAB|ELAB-3|GHH OE|BLDG4|200202150930||ORU^R01|CNTRL-3456|P|2.4\r'
message2 += '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\r'
message2 += '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\r'
message2 += 'OBX|1|SN|1554-5^GLUCOSE^POST 12H CFST:MCNC:PT:SER/PLAS:QN||^182|mg/dl|70_105|H|||F'
for line in sys.stdin:
message += line[:-1]
print message
print '\n\n'
print "New message:\n\n"
print message2
输出:
^{pr2}$我的文件看起来像:
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
编辑:我的问题的解决方案是:删除硬编码消息中的'\r'或将它们添加到我的文件中。但在我需要它们进行进一步处理之后,我只需将它们添加到我的文件中就解决了我的问题。在
尝试正确读取文件,而不是通过stdin,以避免控制字符弄乱它:
当Python读取文本文件时,行分隔符将从平台默认值转换为结尾。
\n
。在Windows上,行用\r\n
分隔,但在Python中,行将以^{但是,您的硬编码字符串包含
\r
回车字符,从文件中读取的行不会如果最后一行没有行分隔符,不管怎样,你都会无条件地删除最后一个字符。使用
line.rstrip('\n')
删除换行符,但仅当存在时才使用。每当您认为您有相同的字符串,但Python告诉您一些不同的东西时,请查看这些字符串的^{} function 的输出(在python3上使用^{} )。您还可以使用^{} function 快速获得可能不同的指示。
在您的例子中,似乎没有删除(足够)换行符,而您的测试消息包含
\r
个字符。这意味着message2
文本将逐行替换自己,因为它不会前进到下一行。使用\n
;甚至可以使用三重引号的字符串来保留换行符:相关问题 更多 >
编程相关推荐