Версия перевода Unicode требует сопоставления с порядковыми номерами Unicode (которые можно получить для одного символа с ord
) с порядковыми числами Unicode. Если вы хотите удалить символы, вы отображаетесь на None
.
Я изменил вашу функцию, чтобы создать диктовку, отображающую порядковый номер каждого символа в порядковый номер того, на что вы хотите перевести:
def translate_non_alphanumerics(to_translate, translate_to=u'_'):
not_letters_or_digits = u'!"#%\'()*+,-./:;<=>?@[\]^_`{|}~'
translate_table = dict((ord(char), translate_to) for char in not_letters_or_digits)
return to_translate.translate(translate_table)
>>> translate_non_alphanumerics(u'<foo>!')
u'_foo__'
edit: Оказывается, что преобразование перевода должно отображаться из порядкового номера Unicode (через ord
) в другой порядковый номер Unicode, строку Unicode или None (для удаления). Таким образом, я изменил значение по умолчанию для translate_to
, чтобы оно было литералом Unicode. Например:
>>> translate_non_alphanumerics(u'<foo>!', u'bad')
u'badfoobadbad'