Эффективная массовая замена Python на неизвестных персонажей - PullRequest
0 голосов
/ 08 июня 2011

PHP4 + основанный на MySQL4 пост в проект Django 1.1, и он смешивает некоторые буквы.
Каков наилучший (самый эффективный) способ замены таким способом?
Проблема для меня в том, что я не могу получить значения для этих букв. Есть ли онлайн-инструмент для этого?

У меня есть textField с различными буквами, и я хочу заменить их следующим образом:

àèæëáðøûþ => ąčęėįšųūž
ÀÈÆËÁÐØÛÞ => ĄČĘĖĮŠŲŪŽ

У меня был похожий случай, когда я должен был очистить код, поэтому я использовал это:

def clean(string):
     return ''.join([c for c in string if ord(c) > 31 or ord(c) in [9, 10, 13]] )

Обновление: мне удалось извлечь значения Unicode, глядя на сообщения отладки Django (replace_from: replace_to):

{'\xe0':'\u0105', '\xe8':'\u010d', '\xe6':'\u0119', '\xeb':'\u0117', '\xe1':'\u012f',
 '\xf0':'\u0161', '\xf8':'\u0179', '\xfb':'\u016b', '\xfe':'\u017e',
 '\xc0':'\u0104', '\xc8':'\u010c', '\xc6':'\u0118', '\xcb':'\u0116', '\xc1':'\u012e',
 '\xd0':'\u0160', '\xd8':'\u0172', '\xdb':'\u016a', '\xde':'\u017d'

Таким образом, основная проблема остается - замена

Ответы [ 3 ]

2 голосов
/ 08 июня 2011

Попробуйте метод str.replace() - должен работать со строками Unicode.

str.replace(old, new[, count])

Возвращать копию строки со всеми вхождениямиподстрока старая заменена на новую.Если указан необязательный аргумент count, заменяются только первые вхождения count.

Убедитесь, что строки old и new имеют тип Unicode (что также относится к вашим входным данным).

Узнайте, во что должна входить ваша входная (не-Unicode) строка. Например, она может быть в кодировке latin1.Используйте встроенный метод str.decode(), чтобы создать версию ваших данных в Юникоде и передать ее в str.replace().

>>> unioldchars = oldchars.decode("latin1")
>>> newdata = data.replace(unioldchars, newchars)
.
0 голосов
/ 09 июня 2011

string.translate (s, table [, deletechars])

Удалить все символы из s, которые находятся в deletechars (если настоящее время), а затем перевести символы с помощью таблицы, которая должна быть 256-символьная строка, дающая перевод для каждого символьного значения, индексируется по порядковому номеру. Если таблица None, то удаление только символа шаг выполнен.

Смотри также http://docs.python.org/library/string.html#string.maketrans

0 голосов
/ 08 июня 2011

Я бы сделал это сам.Встроенная функция замены мало полезна, если вы хотите многократные эффективные замены.

Посмотрите на это: http://code.activestate.com/recipes/81330-single-pass-multiple-replace/

РЕДАКТИРОВАТЬ: ПОДОЖДИТЕ, вы хотели сделать замену клиентом-сторона, как в текстовом поле?

...