2011-06-08 128 views
0

這是我的代碼:如何將一個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 

但它不工作要麼:(

我怎樣才能解決這個問題

回答

0

檢查的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

2

可能是因爲您正在嘗試與等號進行字符串比較。這有隱藏的問題,即字符串是字符列表。這在c中更爲明顯,如果您將其與字符串進行比較,則會得到錯誤的結果,因爲您正在比較第一個字符串的指針和第二個字符串的指針。

Python很聰明,可以使用更明顯的比較運算符,但是如果你的字符串不完全相同,那麼它將返回false。如果您的數據填充了一定數量的字符,則您的字符串在內部會有所不同。

whitespace = 'Python ' 
str = 'Python' 

這些不一樣。要看到,如果你的字符串被輸入載,使用

str in whitespace 

但是請注意,這將返回true爲

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

檢查字符串Python文檔獲取更多信息和替代方法。

相關問題