将字节解码为文本并进行比较时出现问题?

时间:2019-07-25 23:10:02

标签: python-3.x

我不明白为什么当您使用'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'?

1 个答案:

答案 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')