На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD
  
    > Python. Есть ли возможность выводить из массива или кортежа кирилицу не в ASCII? , как мне объяснили из кортежей и массивов все данные выводятся метродом _repr_()
      а он не умеет выводить в нужной кодировке, потому что все даныне представляет только в виде ASCII и non-ASCII (вида 0x/00x/xx/ и т.д.) сделать же нормальный вывод кирилицы не понятно как.
      Вот небольшой код иллюстрирующий проблему:
      ExpandedWrap disabled
        # -*- coding: cp1251 -*-
        import random
         
        def somefunc():
            somelist=[1,2,3,4,5,6,7,8,9]
            get_some_vars=random.sample(somelist, 3)
            var_one, var_two, var_three=get_some_vars
            return 'Значение один', var_one, 'Значение два', var_two, 'Значение три', var_three
         
        somedict={'name_one': 1, 'name_two': 2, 'name_three': 3}
         
        for step_one, step_two in somedict.iteritems():
            print step_one, somefunc()


      Выводит он следующее:

      name_one ('\xc7\xed\xe0\xf7\xe5\xed\xe8\xe5 \xee\xe4\xe8\xed', 1, '\xc7\xed\xe0\xf7\xe5\xed\xe8\xe5 \xe4\xe2\xe0', 3, '\xc7\xed\xe0\xf7\xe5\xed\xe8\xe5 \xf2\xf0\xe8', 2)
      name_two ('\xc7\xed\xe0\xf7\xe5\xed\xe8\xe5 \xee\xe4\xe8\xed', 3, '\xc7\xed\xe0\xf7\xe5\xed\xe8\xe5 \xe4\xe2\xe0', 6, '\xc7\xed\xe0\xf7\xe5\xed\xe8\xe5 \xf2\xf0\xe8', 5)
      name_three ('\xc7\xed\xe0\xf7\xe5\xed\xe8\xe5 \xee\xe4\xe8\xed', 1, '\xc7\xed\xe0\xf7\xe5\xed\xe8\xe5 \xe4\xe2\xe0', 8, '\xc7\xed\xe0\xf7\xe5\xed\xe8\xe5 \xf2\xf0\xe8', 9)

      А хотелось бы что бы выводил все же кирилицу правильно в нужной кодировке, а не как набор non-ASCII символов. Возможно ли такое?
        Если это в целях отладки, то попробуй с помощью pprint выводить объекты (правда, не совсем "чистый" способ):
        ExpandedWrap disabled
          import pprint
           
          real_safe_repr = pprint._safe_repr
          def safe_repr(object, *args, **kwargs):
              if isinstance(object, basestring):
                  return ("'%s'" % object.decode('windows-1251').encode('windows-1251')), True, False
              return real_safe_repr(object, *args, **kwargs)
          pprint._safe_repr = safe_repr
           
          ...
           
          pprint.pprint(somefunc())
          Я в программировании совсем новичок, поэтому не могли бы вы расписать подробнее, что бы мне уяснить смысл.
            Сначала скажи, чего именно хочешь добиться? Выводить объекты в понятном, читаемом виде, или просто выводить информацию из этих объектов?
              Второе, но именно из массива и кирилицей (ну может быть есть какой то другой способ - но я его не знаю), потому что предполагается, что у меня будет хранится некоторое количество фраз в кирилице над которыми надо проводить операции обрезания, замены слов, то есть полностью контролировать параметры вывода. Как это сделать, я пока не могу додуматся.
              Вообще же, хочется что бы кирилица нормально читалась при любом способе вывода (включая вышеуказанный пример в начале темы), но вот как это сделать?
              Сообщение отредактировано: rudm -
                Может быть стоит мигрировать целиком на utf-8?
                  Я бы с большой радостью, только бы можно было нормально выводить кирилицу, но как?
                  Если просто прописать # -*- coding: utf-8 -*-
                  то я боюсь что это не решит проблему.
                    Свои микропрограммы на питоне писал в VIM.
                    В начало в ставлял
                    # vim: set fileencoding=utf-8 ts=4 sw=4 expandtab:
                    Все работало.
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0278 ]   [ 15 queries used ]   [ Generated: 27.04.24, 20:14 GMT ]