Форум сайта python.su
Есть слово на русском языке (кирилица), хочу перевести его в латиницу, для это создал словарь соответствий. Не могу понять почему не получается, с цифрой все нормально, с буквами возвращает None. Подозреваю, что ошибка в кодировке, но не могу понять, что именно надо поправить.
# -*- coding: UTF-8 -*- def main(): my_dict = { '1': '2', 'ы': 'y', 'й': 'j', } word = '11ый' for w in word: print my_dict.get(w) if __name__ == "__main__": main()
Офлайн
ajib6ept
Есть слово на русском языке (кирилица), хочу перевести его в латиницу, для это создал словарь соответствий. Не могу понять почему не получается, с цифрой все нормально, с буквами возвращает None. Подозреваю, что ошибка в кодировке, но не могу понять, что именно надо поправить.
def main(): my_dict = { '1': '2', u'ы': 'y', u'й': 'j', } word = u'11ый' for w in word: print my_dict.get(w) if __name__ == "__main__": main()
Офлайн
Ну да, решение должно быть простое. Спасибо, странно, что ранее не додумался до такого варианта. Проблема решена
Офлайн
ajib6ept
для slug или как?
Офлайн
Для этих нужд у строк и юникода есть специальный метод.
http://www.tutorialspoint.com/python/string_translate.htm
Подойдёт если не используются сочетания.
Офлайн
Singularity
ajib6eptдля slug или как?
Shaman
Для этих нужд у строк и юникода есть специальный метод.http://www.tutorialspoint.com/python/string_translate.htmПодойдёт если не используются сочетания.
Офлайн
ajib6ept
сходи туда и выдери все что тебе надо
https://pypi.python.org/pypi/awesome-slugify/1.4
Офлайн
Помнится делал подобное - сперва заменял всякие ‘ж’, ‘ш’ итд с помощью replace, а затем применял translate к оставшимся. У translate скорость выше, чем у других способов.
Офлайн
не помню где взял
# -*- coding: utf-8 -*- import re def transliterate(string): capital_letters = {u'А': u'A', u'Б': u'B', u'В': u'V', u'Г': u'G', u'Д': u'D', u'Е': u'E', u'Ё': u'E', u'З': u'Z', u'И': u'I', u'Й': u'Y', u'К': u'K', u'Л': u'L', u'М': u'M', u'Н': u'N', u'О': u'O', u'П': u'P', u'Р': u'R', u'С': u'S', u'Т': u'T', u'У': u'U', u'Ф': u'F', u'Х': u'H', u'Ъ': u'', u'Ы': u'Y', u'Ь': u'', u'Э': u'E',} capital_letters_transliterated_to_multiple_letters = {u'Ж': u'Zh', u'Ц': u'Ts', u'Ч': u'Ch', u'Ш': u'Sh', u'Щ': u'Sch', u'Ю': u'Yu', u'Я': u'Ya',} lower_case_letters = {u'а': u'a', u'б': u'b', u'в': u'v', u'г': u'g', u'д': u'd', u'е': u'e', u'ё': u'e', u'ж': u'zh', u'з': u'z', u'и': u'i', u'й': u'y', u'к': u'k', u'л': u'l', u'м': u'm', u'н': u'n', u'о': u'o', u'п': u'p', u'р': u'r', u'с': u's', u'т': u't', u'у': u'u', u'ф': u'f', u'х': u'h', u'ц': u'ts', u'ч': u'ch', u'ш': u'sh', u'щ': u'sch', u'ъ': u'', u'ы': u'y', u'ь': u'', u'э': u'e', u'ю': u'yu', u'я': u'ya',} capital_and_lower_case_letter_pairs = {} for capital_letter, capital_letter_translit in capital_letters_transliterated_to_multiple_letters.iteritems(): for lowercase_letter, lowercase_letter_translit in lower_case_letters.iteritems(): capital_and_lower_case_letter_pairs[u"%s%s" % (capital_letter, lowercase_letter)] = u"%s%s" % (capital_letter_translit, lowercase_letter_translit) for dictionary in (capital_and_lower_case_letter_pairs, capital_letters, lower_case_letters): for cyrillic_string, latin_string in dictionary.iteritems(): string = re.sub(cyrillic_string, latin_string, string) for cyrillic_string, latin_string in capital_letters_transliterated_to_multiple_letters.iteritems(): string = re.sub(cyrillic_string, latin_string.upper(), string) return string string = u'Ночь Пасмурно, дымка +2+36 74729996 С247 98 +1+34 Утро Туман +1+34 74829997 СВ124 100 +1+34 жаба дышит' print transliterate(string)
Офлайн
Kasta_nedaУжас какой-то.
не помню где взял
Офлайн