nobodynoone
@nobodynoone

Как использовать ord, chr, translate+maketrans в python?

Привет!

Я хочу сделать траслит с применением стандартных функций python`а

1. translate https://docs.python.org/3.4/library/stdtypes.html?...
2. maketrans https://docs.python.org/3.4/library/stdtypes.html?...
3. ord, chr https://docs.python.org/3.4/howto/unicode.html

Проблема в том, что можно давать на вход maketrans, ord, chr только одну букву, можно ли это как то побороть ?

Например, я могу сделать так

>>> tbl = maketrans('евица', 'evica')
>>> print('чечевица'.translate(tbl))
чeчeviцa


Но не могу вот так

>>> print('чечевица'.translate(tbl.update({
           ord('ч'): ord('ch'), # I cant do it, because ord accept only one letter, no more
       })))
# I want get this result: chechevica


Как я могу сделать это?
  • Вопрос задан
  • 5634 просмотра
Пригласить эксперта
Ответы на вопрос 1
yttrium
@yttrium
с какого угла не зайти:
один символ юникода не заменить двумя символами
два байта не транслейтится в два байта, т.к. транслейтится по одному. Можно конечно составляющие символа транслейтить, но это не удобно

Как гласит zen of python - делай проще
import re
res = re.compile(r'\w')
tbl = {'ч':'ch'..}
print(res.sub(lambda x: tbl[x.group()], 'чечевица')
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы