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()