Как сравнить строку Unicode с элементом lxml и простой строкой? - PullRequest
0 голосов
/ 08 июня 2011

Это мой код:

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

Я не знаю, почему это не работает. Вот результат:

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

приписка

Я пробовал это:

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

Но это тоже не работает: (

Как я могу исправить эту проблему?

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Возможно, потому что вы пытаетесь сделать сравнение строк со знаком равенства. Это имеет скрытые проблемы, а именно строки являются списками символов. Это более очевидно в c, где, если вы сравниваете со строками, вы получаете плохие результаты, потому что вы сравниваете указатель вашей первой строки с указателем вашей второй строки.

Python достаточно умен, чтобы использовать более очевидный оператор сравнения, но если ваши строки не совсем идентичны, он вернет false. Если ваши данные заполнены пробелами до определенного количества символов, ваши строки будут отличаться внутри.

whitespace = 'Python   '
str = 'Python'

Они не оценивают то же самое. Чтобы узнать, содержится ли ваша строка во входных данных, используйте

str in whitespace

Но учтите, что это вернет true для

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

Проверьте документы Python на строки для получения дополнительной информации и альтернативных методов.

0 голосов
/ 08 июня 2011

Проверьте тип 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.В Python 3 все строки в Unicode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...