2012-02-01 4 views
1

Когда я запускаю следующий код:преобразования NavigableString в юникод строку

if substr in movie.lowercase:

Я получаю следующую ошибку

AttributeError: 'NavigableString' object has no attribute 'lowercase'

movie отсюда:

movie = row.td.div.h4.string

Я попытался изменить его (без успеха)

movie = row.td.div.h4.string.string

или

movie = unicode(row.td.div.h4.string)

Вы знаете, как преобразовать NavigableString в обычную строку Юникода с lowercase методом?

ответ

4

unicode() не имеет .lowercase() способ есть .lower().

NavigableString является примером unicode. Он имеет все методы unicode.

A case-insensitive search is more complicated then just calling .lower(), например. full unicode casefolding in Python (case-insensitive search for keywords).

+0

Этот ответ прямо не отвечает на вопрос. В этом вопросе спрашивается, как преобразовать NavigableString в строку. Хотя ваш ответ является более элегантным решением, он не отвечает на вопрос. Не могли бы вы обновить свой ответ с объяснением того, как можно преобразовать NavigableString в строку, если это возможно? – melchoir55

+0

@ melchoir55 ответ явно говорит, что NavigableString * является * экземпляром 'unicode'. Если вы не понимаете, что это означает, что NavigableString * - это уже строка; просить. – jfs

0

Не должно быть никаких проблем, просто используя метод str() python для навигационного строкового объекта, который у вас есть. Из моего опыта работы с NavigableString они уже находятся в юникоде, поэтому, если вам нужна строка, в которой будет работать .lower, вам необходимо передать ее в строку python (UTF-8), а затем перевести ее обратно в unicode.

Смежные вопросы