如何将一个Unicode字符串与一个lxml元素和一个简单字符串进行比较?

问题描述:

这是我的代码:如何将一个Unicode字符串与一个lxml元素和一个简单字符串进行比较?

for name in doc_preparate.cssselect('.dbl1:first-child'): 
     if name.text != u"Продукция": 
      print name.text 

我不知道为什么它不工作。这里是结果:

Артрозан 
Продукция 
Пенталгин 
Продукция 
Пенталгин 
Продукция 
Пенталгин 
Продукция 
Пенталгин 
Продукция 
... 

P.S.

我尝试这样做:

for name in doc_preparate.cssselect('.dbl1:first-child'): 
     print type(name.text) 
     if u"Продукция" not in name.text: 
      print name.text 

但它不工作要么:(

我怎样才能解决这个问题

检查的name.text类型

Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> a = "allo" 
>>> b= u"allo" 
>>> type(a) 
<type 'str'> 
>>> type(b) 
<type 'unicode'> 
>>> 

请确保name.text的类型也是unicode。在P ython 3,所有字符串都是unicode。

+0

......这引发了一个问题:OP应使用哪种字符编码来解码字符串? – 2011-06-08 15:51:34

+0

Mirgorod 2011-06-08 15:57:32

可能是因为您正在尝试与等号进行字符串比较。这有隐藏的问题,即字符串是字符列表。这在c中更为明显,如果您将其与字符串进行比较,则会得到错误的结果,因为您正在比较第一个字符串的指针和第二个字符串的指针。

Python很聪明,可以使用更明显的比较运算符,但是如果你的字符串不完全相同,那么它将返回false。如果您的数据填充了一定数量的字符,则您的字符串在内部会有所不同。

whitespace = 'Python ' 
str = 'Python' 

这些不一样。要看到,如果你的字符串被输入载,使用

str in whitespace 

但是请注意,这将返回true为

'Python' in 'Python ' 
'Python' in 'PythonAnd other stuff ' 

检查字符串Python文档获取更多信息和替代方法。