Форум сайта python.su
26
Есть слово на русском языке (кирилица), хочу перевести его в латиницу, для это создал словарь соответствий. Не могу понять почему не получается, с цифрой все нормально, с буквами возвращает 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()
Офлайн
1
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()
Офлайн
26
Ну да, решение должно быть простое. Спасибо, странно, что ранее не додумался до такого варианта. Проблема решена
Офлайн
75
ajib6ept
для slug или как?
Офлайн
88
Для этих нужд у строк и юникода есть специальный метод.
http://www.tutorialspoint.com/python/string_translate.htm
Подойдёт если не используются сочетания.
Офлайн
26
Singularity
ajib6eptдля slug или как?
Shaman
Для этих нужд у строк и юникода есть специальный метод.http://www.tutorialspoint.com/python/string_translate.htmПодойдёт если не используются сочетания.
Офлайн
75
ajib6ept
сходи туда и выдери все что тебе надо
https://pypi.python.org/pypi/awesome-slugify/1.4
Офлайн
Помнится делал подобное - сперва заменял всякие ‘ж’, ‘ш’ итд с помощью replace, а затем применял translate к оставшимся. У translate скорость выше, чем у других способов.
Офлайн
6
не помню где взял
# -*- 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)
Офлайн
88
Kasta_nedaУжас какой-то.
не помню где взял
Офлайн