Python 3.5 заменяет акцент на HTML-сущность

Я пытаюсь автоматизировать серию запросов, но для этого мне нужно заменить символы с ударением на его HTML-сущности. По причинам это должно быть в Python3

Пример:

vèlit 
[needs to become] 
vèlit

Дело в том, что всякий раз, когда я пытаюсь сделать слово. Место, оно не находит его.

Это:

if u'è' in sentence:
    print(u'Found è')

Работает и находит "Е", но делает:

word.replace('è','è')

Ничего не делает

Есть идеи?

3 ответа

Вы можете использовать метод str.translate и данные в пакете html python для преобразования символов в эквивалентную сущность html.

Сделать это, str.translate нужен словарь, который отображает символы (технически целочисленное представление символа или порядковый номер) в html-объекты.

html.entities.codepoint2name содержит необходимые данные, но имена сущностей не ограничены '&' и ';'. Вы используете вложение слов, чтобы создать таблицу с нужными вам значениями.

Как только таблица будет создана, вызовите метод translate вашей строки с таблицей в качестве аргумента, и результатом будет новая строка, в которую будут преобразованы любые символы с эквивалентом html-сущности.

>>> import html.entities
>>> s = 'vèlit'

>>> # Create the transaltion table
>>> table = {k: '&{};'.format(v) for k, v in html.entities.codepoint2name.items()}

>>> s.translate(table)
'vèlit'

>>> 'Voilà'.translate(table)
'Voilà'

В качестве обновления ответа, предоставленного snakecharmerb, может быть полезно знать, что Python 3.3 представил html.entities.html5, который отображает больше символов в эквивалентные символы Unicode.

Мне нужен этот словарь, потому что codepoint2name не включал ł.

Итак, код для создания таблицы перевода немного изменен на этот:

table = {get_wide_ordinal(v): '&{}'.format(k) for k, v in html.entities.html5.items()}

где get_wide_ordinalЯ получил с /questions/20163036/izvlechenie-koda-v-python-i-unicode/20163054#20163054:

      def get_wide_ordinal(char):
    if len(char) != 2:
        return ord(char)
    return 0x10000 + (ord(char[0]) - 0xD800) * 0x400 + (ord(char[1]) - 0xDC00)

потому что некоторые персонажи в html5 поиск имеет ширину два байта.

Обратите внимание , что HTML5 сущности в этой таблице сделать конец с ; поэтому он удаляется из строки формата.

Замещать word.replace('è','è') с word = word.replace('è','è') и распечатайте результат для проверки.

word.replace('è','è') работает, но на самом деле не вносит никаких изменений в word сам контент.

Проверьте str.replace()

Другие вопросы по тегам