Python两个相同的字符串被视为不同

时间:2014-09-09 15:45:22

标签: python string python-2.7

我有两个字符串,所有指示看起来都相同:

x1 = 'N C Soft - NCSOFT_Guild Wars 2 December 2013 :: BNLX_AD_Parallax_160x600'
x2 = 'N C Soft - NCSOFT_Guild Wars 2 December 2013 :: BNLX_CT_Parallax_160X600'

然而,检查相等性表明它们不是。

In [312]: if x1 != x2:
   .....:     print 'yep'
   .....:
yep

我还尝试从命令提示符复制两个字符串,然后将它们作为新变量粘贴回来,但它们仍然不相等。我80%确定它是因为它们以奇怪的方式编码,插入了一些我无法看到的奇怪字符,但是使用type()只显示为字符串

有什么方法可以看到"真实"串?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:8)

他们不一样;使用difflib.ndiff()显示了这两个值之间的差异非常明显:

>>> import difflib
>>> print '\n'.join(difflib.ndiff([x1], [x2]))
- N C Soft - NCSOFT_Guild Wars 2 December 2013 :: BNLX_AD_Parallax_160x600
?                                                      ^^             ^

+ N C Soft - NCSOFT_Guild Wars 2 December 2013 :: BNLX_CT_Parallax_160X600
?                                                      ^^             ^

一般情况下,如果有疑问,请使用repr()查看表示。 Python 2将对字符串中的任何非可打印或非ASCII字符使用转义,任何“搞笑”#39;人物会像拇指一样突出。在Python 3中,使用ascii() function得到与repr()相同的结果,保守性较低,而且Unicode的字符组合乍一看看起来相同。

对于仍无法看到两者之间有什么变化的字符串,上述difflib工具也可以帮助指出究竟发生了哪些变化。