我不明白为什么当您使用'open'函数以字节格式打开文档并将其解码为文本时,与包含完全相同文本的变量相比,python表示它们是不同的。但这仅在文档的解码文本带有换行符时才会发生。
示例:
o = open('New.py','rb')
t = o.read().decode()
x = '''this is a
message for test'''
if t == x:
print('true')
else:
print('false')
尽管解码后的文本“ t”和“ x”的文本完全相同,但python识别出它们是不同的,并输出false。
我真的试图从很多方面找到差异,但是我仍然不明白它们之间的差异以及如何将't'转换为等于'x'?
答案 0 :(得分:0)
这是因为即使您没有看到换行符,它仍然是字符串的一部分(表示为\n
)。
import binascii
o = open('new.py','rb')
t = o.read().decode()
print(binascii.hexlify(t.encode()))
# b'7468697320697320610a6d65737361676520666f7220746573740a'
x = '''this is a
message for test'''
print(binascii.hexlify(x.encode()))
# b'7468697320697320610a6d65737361676520666f722074657374'
在这里,0x0a
末尾的t
是新行的字节表示形式。
要使它们相同,您需要strip
空格和换行符。假设 new.py 看起来像这样(与x
的值相同):
this is a
message for test
然后执行以下操作:
o = open('new.py','rb')
t = o.read().decode().strip()
x = '''this is a
message for test'''
if t == x:
print('true')
else:
print('false')