Основы Python — кратко. Строки.

    Поскольку число положительных отзывов превысило число отрицательных, продолжу выкладывание уроков. Те кто уже знаком с основами — можете или просто пропустить урок, или попробовать сделать задание 3 самым коротким способом :)

    Для начала маленькое замечание.

    Начиная с Python 2.3, всем, кто использует не-ASCII кодировку нужно добавлять указание о кодировке в самом начале программы. Для русского языка это будет в основном:
    # -*- coding: cp1251 -*-

    или использовать для хранения исходных текстов файлы utf-8 (что предпочтительней).

    Изучив управление числами, пришла пора осваивать строки. Пайтон обладает весьма богатым набором возможностей в этой области.

    Строки


    Строки могут быть заключены в одинарные или двойные кавычки, строки могут использовать esc-последовательности в стиле С, многострочные константы задаются в тройных кавычках.
    >>> "habrahabr"
    'habrahabr'
    >>> 'foo bar boz'
    'foo bar boz'
    >>> "won't"
    "won't"
    >>> 'don"t'
    'don"t'
    >>> "couldn\"t"
    'couldn"t'
    >>> """multi line
    ... very long
    ... string constant"""
    'multi line\nvery long\nstring constant'
    >>> 'this takes \
    ... two lines'
    'this takes two lines'

    Строки можно склеивать оператором + и «размножать» оператором *
    >>> "Hello "+"word"
    'Hello word'
    >>> "Hello "*3
    'Hello Hello Hello '

    По сути же своей строка представляет собой последовательность символов с произвольным доступом. Для получения части символов строки можно использовать т.н. оператор «среза». Обратите внимание, что нумерация начитается с нуля (и достаточно хаотична на первый взгляд).
    >>> str = "Hello, cruel world!"
    # получить 4 символ строки
    >>> str[3] 
    'l'
    # все символы с 8 по 14
    >>> str[7:14]
    'cruel w'
    # каждый второй символ со 2 по 13
    >>> str[1:12:2]
    'el,cul'
    # некоторые значения можно опускать
    # каждый второй символ строки.
    >>> str[::2]
    'Hlo re ol!'

    Если опустить первый из трех параметров, он считается равным нулю, если опустить второй – срез будет продолжен до конца строки.
    # первые 2 символа строки
    >>> str[:2]
    'He'
    # вся строка кроме 2 первых символов
    >>> str[2:]
    'llo, cruel world!'

    Срезы с неправильными границами обрабатываются следующим образом:
    — если верхняя граница среза больше длины строки, то она уменьшается до длины строки
    — если нижняя граница больше верхней, то возвращается пустая строка

    Также срезы могут принимать отрицательные значения.
    # последний символ
    >>> str[-1]
    '!' 
    # второй символ с конца
    >>> str[-2]
    'd'
    # два последних символа
    >>> str[-2:]
    'd!'
    # все символы кроме последних двух
    >>> str[:-2]
    'Hello, cruel worl'

    Лучший способ запомнить, как определяются индексы в срезе — считать их указывающими между символами, с номером 0 на левой границе первого символа. А правая граница последнего символа имеет индекс равный длине строки.
    Для положительных символов длина строки равна разности между числами на границе.

    Для определения длины строки используется функция len().

    Unicode

    В последних версиях Пайтон очень хорошо поддерживается работа с Unicode-строками.

    Для задания unicode-строки в виде константы используется префикс u.
    >>> uni = u"Тест"
    >>> uni
    u'\u0422\u0435\u0441\u0442'

    Кроме того, Пайтон позволяет создать строку в Unicode с помощью одноименной функции.
    >>> uni = unicode("Тест", "UTF-8")
    >>> uni
    u'\u0422\u0435\u0441\u0442'

    Эта функция функция может работать с Latin-1, ASCII, UTF-8, UTF-16, с русскими кодировками ISO-8859-5, KOI8-R, CP1251, CP866 и Mac-cyrillic, и многими другими.

    Для обратного преобразования служит метод encode, который преобразует unicode-строку в строку с заданной кодировкой.
    >>> uni.encode("UTF-8")
    '\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82'
    >>> uni.encode("CP1251")
    '\xd2\xe5\xf1\xf2'

    Для преобразования строки в список по определенному разделителю, используется метод split.
    Этот метод в качестве параметра запрашивает разделитель, а возвращает список отдельных «слов» по которому можно «пройти» в цикле for.
    >>> str = "Mary has a little lamb"
    >>> str.split(" ")
    ['Mary', 'has', 'a', 'little', 'lamb']
    >>> for word in str.split(" "):
    ...     print word
    ...
    Mary
    has
    a
    little
    lamb


    Домашнее задание.

    1. Написать программу, выводящую заданную пользователем строку как минимум в 3 разных кодировках. При этом писать вызов метода encode() в программе можно только 1 раз.
    2. Написать программу поиска самого длинного слова в строке, разделенной пробелами.
    3. (Повышенная сложность) Написать программу декодирования телефонного номера для АОН.
    По запросу АОНа АТС посылает телефонный номер, используя следующие правила:
    — Если цифра повторяется менее 2 раз, то это помеха и она должна быть отброшена
    — Каждая значащая цифра повторяется минимум 2 раза
    — Если в номере идут несколько цифр подряд, то для обозначения «такая же цифра как предыдущая» используется идущий 2 или более подряд раз знак #

    Например, входящая строка 4434###552222311333661 соответствует номеру 4452136
    Кстати, регулярные выражения использовать в этих заданиях — нельзя :)
    Метки:
    Поделиться публикацией
    Похожие публикации
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 108
    • +1
      когда будете проверять домашнее задание? по какой шкале оценки?
      • 0
        когда вышлете его мне в личку, буду проверять. оценки - чисто для вас. бинарные. да-нет :)
      • 0
        Покажите как использовать len() на примере. Плз.
        • 0
          >>> a = '123456789'
          >>> print len(a)
          9
          • 0
            не помню, писали ли вы о версии питона в примерах. Но стоит указывать все же. Так как начав разбираться не сразу понял ошибки, оказалось что в версии 3 print уже функция и нужно писать print(len(a))
            • 0
              этой статье 2 года почти, в то время 3 пайтон еще был из области экзотики, надо же на это поправку делать.
              • 0
                да. извиняюсь, на дату не сразу посмотрел.
                Но вот я читал сегодня, а после меня придет новичек, скачает последнюю версию (3 или какую там потом) попробует пописать, не разберется, разозлится и плюнет на это дело. :) Можно просто пометить в статье, что примеры кода приведены для определенной версии языка.
                • 0
                  Вот я пришол.
        • 0
          Неужели на хабре нет людей, которые пишут на Питоне? Автору статьи спасибо за развитие данного блога, но, ИМХО, перепечатывать книгу по Питону, которую каждый может скачать с официального сайта как-то не прилично.
          • +1
            Люди плюсуют - значит им нужно. ИМХО
            • –2
              Но есть кому и не надо О_О Но они почему-то молчат.
              • +2
                кому не надо правильно молчат
                зачем мешать другим получать знания
                • 0
                  А когда планируется первый релиз РЯП ? :)
                  Вы озвучили массу планов, столько всего интересного... ждем продолжения :)
                  • 0
                    Неужто кто-то еще помнит? :) Остатось еще немного. Первая IDE для РЯП выйдет как раз когда карму подниму :)
                • –2
                  плюсует школие, выпросившее копейку кармы.
                  надеюсь вы больше не будете засорять интернет мусором, перепечатывая материал из оригинальных источников.
                  • 0
                    Господи, кто бы говорил. Посмотрите на свою карму, а потом высказывайтесь так в чужую сторону. Бред...
                    • 0
                      см. мой ответ начавшему данную тему. остальное комментировать не буду.
                  • 0
                    я не перепечатываю книгу. просто про строки сказать много нечего. но пропустить нельзя. потому и получается похоже на оригинальную книгу.
                    в принципе действительно получается отчасти некрасиво, потому я постараюсь в следующем посте собрать все ссылки на всю информацию на русском что есть.
                    и кто не захочет читать мои "конспекты" сможет спокойно этого не делать.
                    для тех же кому это полезно - пока продолжу. тем более что дальше темы будут все интереснее... :)
                    • 0
                      Есть.

                      ИМХО пусть перепечатывает.
                      Это возможность ознакомиться с праведной мощью Python для людей которые не хотят целенаправленно изучать его, но не прочь поглядеть новый язык.

                      P.S. Устал ждать по 5 минут. Мысли появляются чаще, а пока сидишь выжидаешь часть из них забывается.
                      • 0
                        солидарен с Вами. Вот я по работе использую питон на начальном уровне - в основном как консольный парсер. Но книгу читать мне просто некогда (нет времени на это). А вот такие статейки я бы читал и потихонечку просвещался.

                        Cleg - если надумаешь "закрывать" такие вот статьи - пости для друзей :) только не бросай
                        • 0
                          посмотрим...
                          • 0
                            вы читали притчу про дровосеков?
                            оправдание, чтобы что-то не делать всегда найдется, а вы найдите оправдание чтобы сделать что-то.
                            между прочим, чтение книги у вас заняло бы столько же времени, сколько чтение книги. плохому танцору всегда яйца мешают.
                        • 0
                          А что за книга?
                          • 0
                            книг несколько. постараюсь или сегодня в квечеру или завтра выложить пост со списком ссылок на все что есть по пайтону на русском.
                            • 0
                              Жду с нетерпением. Надеюсь в списке будет то чего нету портале питон-программистов http://python.su/forum/viewtopic.php?id=18
                              • 0
                                коллекцию литературы slav0nic-а я вряд ли переплюну :)
                          • 0
                            Есть, и думаю таких на Хабре немало.
                            Например, у меня сейчас все раразработки идут на питоне. И чем дальше с ним работаю, тем больше нравится. Но я помню как сам когда-то начинал. И вот тут необычность питона как в синтаксисе, так и в логике создает некоторые проблемы, можно сказать «первоначальный барьер». Такие статьи как раз нужны новичкам, чтобы познакомить их с самим языком, показать базовые конструкции, как с этим работать, что этот язык однозначно стоит того, чтобы его освоить - окупится сторицей.
                            В этом плане автор делает хорошее дело — в простой понятной манере знакомит с языком, кому надо тот заинтересуется, кому не надо — пройдет мимо. Каждому свое.
                          • 0
                            Автор делает доброе дело, спасибо, с удовольствием изучаю. Возможно вы слушали последний (195) на текущий момент времени UWP (подкаст умпутуна), в котором он расказывал о методах обучения его дочки игре на музыкальном инструменте. Метод донесения инфы автора топика схож с озвученым в подкасте методом (кто не слушал, метод связанный с игрой).
                            • +3
                              Не хочу лишать людей, знакомящихся с Python, удовольствия самим решать задачки, но все же не могу не продемонстрировать гибкость этого языка.

                              Пусть пользователь поместил свою строку в переменную s. Если он вводит только латинские буквы и цифры, то первую задачку можно решить очень просто:

                              print s, s, s

                              Это строка s сразу в utf-8, latin-1 и cp1251, например. :)

                              Python мне нравится и за то, что в ним можно использовать функциональный стиль программирования, что часто сокращает решение до одной строчки и повышает читаемость (ну, это уже когда как):

                              for x in map(lambda enc: s.encode(enc), ["cp1251","utf-8", "koi8-r"]):
                                      print x,

                              Тут используется аж два известных функциональных приема — определение безымянной функции (lambda), преобразующей строку s в указанную в параметре кодировку, и её применение (map) к каждому из элементов списка. Таким образом, цикл проходит по списку, состоящему из исходной строки, к которой применилось преобразование в различные кодировки.

                              А можно и так:

                              print " ".join(map(lambda x: s.encode(x), ["cp1251","utf-8", "koi8-r"]))

                              Тут используется объединение списка строк. В качестве разделителя используется пробел. Кстати, подобная запись, когда метод для объединения применяется к строке-разделителю, а не к списку, может показаться странным, но к нему быстро привыкаешь.

                              Хотя, старый добрый for с перебором кодировок сделает решение более ясным и удобочитаемым (впрочем, это опять же дело вкуса):

                              for enc in ["cp1251","utf-8", "koi8-r"]:
                                      print s.encode(enc)

                              Одним словом, программист сам может выбрать стиль, в котором он может писать программы.
                              • 0
                                почему join - метод строки? по моим представлениям это должен быть метод массива
                                всегда было инетересно, почему так
                                • 0
                                  Эти голландцы - такие затейники!..
                                  • 0
                                    Сначала тоже показалось странным, но потом привык, и так даже лучше:)
                                  • 0
                                    Об этом написано, например, в статье «Бородавки в Python», где пишется про подобные неочевидности.

                                    Цитата:

                                    «Гвидо Ван Россум высказался против добавления join() в объекты последовательностей, т.к. это бы означало, что каждая последовательность должна была бы реализовывать этот метод; в Python есть три типа последовательностей (строки, кортежи и списки), а также куча классов, которые ведут себя как последовательности.»


                                    Я же предпочитаю думать о join просто как о бинарном операторе, у которого слева строка и справа список.
                                • –3
                                  Долой Питон! Да здравствует Пайтон!
                                  • 0
                                    Я, наверное, как-то нереально торможу, но так и не въехал в объяснения автора про решётку для третьей задачи...
                                    • 0
                                      если в номере телефона есть несколько одинаковых цифр подряд, то каждая вторя заменяется на решетку. чтобы отличить от предыдущей цифры
                                      • 0
                                        Дошло. Ничотак.
                                        http://rafb.net/p/c0F05n12.html - годится? Или можно короче?
                                        • 0
                                          неплохо, очень неплохо :) хотя и не слишком читабельно, но демонстрирует много синтаксических плюшек пайтона :)
                                          особо укорачивать не стоит. тут главное выразительность, а не коротизна...
                                        • 0
                                          в трех строчках:
                                          http://rafb.net/p/SDqC1C58.html
                                          • 0
                                            Неправильно работает на:
                                            "###4434###552222311333661"
                                            "5###4434###552222311333661"
                                            • 0
                                              ну у вас и инпут неправильный ;-)
                                              можно игнорировать хэши в начале строки: http://rafb.net/p/dGlDyc45.html (там еще интересный вложенный ternary operator)
                                              • 0
                                                Гвидо говорит, код читают много больше чем пишут... ;)

                                                > In [21]: aon_decode("444333444")
                                                > Out[21]: '34'
                                          • 0
                                            теперь осталось найти энтузиаста, который сравнит быстродействие всех этих алгоритмов ;-)
                                            • +1
                                              http://rafb.net/p/lUAPb542.html

                                              Никого не забыл? Ничего не напутал? :)

                                              Результаты:

                                              aon_c0F05n12
                                              failed

                                              aon_8Knr8267
                                              f( ##1 ) !=
                                              failed

                                              aon_JIJYos17
                                              failed

                                              aon_tLK1ts77
                                              failed

                                              aon_NlDHpu78
                                              0.219000101089

                                              aon_bGjM3C86
                                              f( ##44##4455 ) != 4445
                                              failed

                                              aon_MUDuVv18
                                              f( ##44##4455 ) != 4445
                                              failed

                                              aon_QT4MtA83
                                              failed

                                              aon_3O5z2b96
                                              f( 5###4434###552222311333661 ) != 4452136
                                              failed

                                              aon_SDqC1C58
                                              f( ###4434###552222311333661 ) != 4452136
                                              failed

                                              aon_dGlDyc45
                                              0.296999931335

                                              aon_f71a95b7a
                                              0.390000104904
                                              • 0
                                                спасибо! вашему решению (NlDHpu78) торжественно присуждаем первое место. приз сегодня скромный - плюсик в карму ;-)
                                                • 0
                                                  и от меня за титаническую работу по сведению воедино :)
                                                  • 0
                                                    моя исправленная версия работает быстрее всех остальных :)
                                                    http://rafb.net/p/Tm5EBF17.html
                                                    • 0
                                                      провёл маленький тест на ускорение работы скрипта вот сама быстрая версия из всех представленных, хотя не самая красивая.

                                                      далее идет эта версия аналог предыдущей, но покрасивее

                                                      использование операторов is и is not для строк ускоряет процесс, чем использование == и !=
                                                      • 0
                                                        Спасибо, про is и is not не знал. Попробовал — действительно стало заметно быстрее.

                                                        А где можно почитать о таких ускоряющих трюках?
                                                        • 0
                                                          ну, для начала - почти классическая статья, в основном про работу со строками http://www.python.org/doc/essays/list2st…

                                                          еще неплохо кое-что описано тут (в основном что иногда полезно "переложить работу на других") http://handyfloss.wordpress.com/2008/02/…

                                                          кое-что еще тут http://blog.ianbicking.org/book-idea-pyt…

                                                          на самом деле - в пайтоне полным-полно мест для небольшой оптимизации и советов типа "используйте где только можно кортежи вместо списков", "выносите разрешене методов за пределы циклов" (это вообще на удивление большой прирост иногда дает...

                                                          и т.п.
                                                          • 0
                                                            спасибо за ссылки почитаю
                                                          • 0
                                                            python.org основной источник, читайте документацию
                                                            оператор is проверяет идентичность объектов, а == только сравнивает используя метод __eq__ данных объектов.

                                                            у каждого объекта есть свой идентификатор, вычислить можно так id(obj).

                                                            например для строк:
                                                            a = 'test'
                                                            b = 'test'
                                                            id(a) == id(b) тоже самое что a is b # true

                                                            но для строки и юникода результат разный, так как разные объекты:
                                                            a = 'test'
                                                            b = u'test'
                                                            a is b # false
                                                            хотя a == b # true

                                                            только не путайте is и == совсем разные операторы.
                                                        • 0
                                                          aon_dGlDyc45 сыпется на aon_decode('22122') == '2', так что чемпиона таки 2.

                                                          Но! Все дружно не учитывают вот такой случай: '33212'. По моей логике должно получиться '32', а не '3', т.к. смотрите, шёл сигнал '33222', и в него затесалась помеха '33212', что скажете?
                                                          • 0
                                                            из условия 33212 - 2 будет считаться помехой т.к. за не следует 1
                                                            • 0
                                                              да. все одиночные символы - помехи.
                                                    • 0
                                                      Кстати, в задачке про АОН если цифра встречается один раз в массиве из повторяющихся цифр, то она разобьет этот массив на группы? То есть, "111111211111" будет равно "1" или "11"? По идее, первый вариант правильный, ведь 2 — это лишь помеха. Но в условии это не было оговорено.

                                                      Попробовал решить задачу без использования циклов, чтобы можно было получить однострочник, и вот, что вышло: http://pastebin.com/f71a95b7a.

                                                      Однострочник для читаемости пришлось развернуть. Кошмарненько, но наверняка можно упростить как-нибудь. :)
                                                      • 0
                                                        не вижу ничего кошмарного :)
                                                        хорошее решение
                                                    • 0
                                                      А ещё можно делать вот так:
                                                      >>> s='123456789'
                                                      >>> s[2:7:2]
                                                      '357'

                                                      То есть кроме начала и коныа ещё и указывать с каким шагом просматривать элементы.
                                                      • 0
                                                        Невнимательно читал. Про это в статье было. (=
                                                        А удалить коммент нельзя?
                                                      • 0
                                                        # все символы с 8 по 14

                                                        >>> str[7:14]

                                                        вот тут мне кажется решение должно быть str[7:13] - ибо 13 это 14-й символ в строке
                                                        • 0
                                                          нет я не прав...хотя это не логично имхо
                                                          надо указать С какого символа брать срез и ДО какого причем его не включать в срез
                                                          • 0
                                                            да, примерно по той же логике работают в С++ алгоритмы (если мне конечно память не изменяет)
                                                            то есть срез [a, b)
                                                            в общем запутывающая логика...
                                                        • +1
                                                          > # каждый второй символ строки.
                                                          > >>> str[::2]
                                                          > 'Hlo re ol!'

                                                          Ещё можно рассказать про то, что step может быть и отрицательным.
                                                          То есть:
                                                          >>> str = "Goodby, cruel world!"
                                                          >>> str[::-1]
                                                          '!dlrow leurc ,ybdooG'
                                                          >>>
                                                          • 0
                                                            ы! вау! спасибо. настолько извращенно я даже не подумал.
                                                            • 0
                                                              Хм, не хочется расстраивать, но в аналоге этого оператора в PHP - функции substr точно также всё работает с отрицательными величинами...
                                                              • 0
                                                                зачем расстраиваться? то что хорошие идеи из Пайтона прживаются в других языках - это же просто замечательно.
                                                                кстати в Пайтоне точно так же идет работа и со списками... так что не тока substr нужен
                                                                • 0
                                                                  Всё-таки PHP в основном на веб ориентирован, в отличие от Пайтона.
                                                                  Просто не стоит думать, что это такая уникальная фича Пайтона. Хотя фича, бесспорно, крайне рулёзная.
                                                                  • 0
                                                                    Очень удобно, когда не требуется специальная функция для среза. Подобная штучка, кстати, есть и в Фортране-90 для массивов.
                                                            • 0
                                                              да - иногда такое спрашивают на собеседованиях - как максимально быстро зареверсить строку - питон в этом смысле хорош :))
                                                              • 0
                                                                Охренеть:))
                                                                • 0
                                                                  Не могу поставить плюс, поэтому просто спасибо.
                                                                • 0
                                                                  Еще один способ склейки строк - написать их подряд.
                                                                  >>> "aa" "bb"
                                                                  'aabb'
                                                                  >>> "aa" \
                                                                  ... "bb"
                                                                  'aabb'
                                                                  >>>

                                                                  удобно для красивого оформления многострочных констант в теле функций
                                                                  • 0
                                                                    да, но работает только со строками. то есть написать типа
                                                                    >>> " dsdsd ".strip() "fdfdf"

                                                                    увы не получится.
                                                                    • 0
                                                                      Да. И это правильно - иначе бы порождало жуткую путаницу. Работа со строками стала бы аццким дебугом — пришлось бы постоянно угадывать где он склеит, а где не склеит.
                                                                      Я потому и написал, что «удобно для оформления констант», потому что это скорее syntactic sugar — простая удобная форма записи километровой строки, чем запись логики программы.
                                                                      • 0
                                                                        забыл цитату, типа "синтаксический сахар может зачастую взывать диабет нечитабельности" :) или как-то так... но это пример безопасного сахара
                                                                  • 0
                                                                    Большое спасибо за гайд! Очень интересно и познаватель - вчера уже скачал интерпритатор, вин32 библиотеки и пару редакторов - сегодня уже пишу анализаторы excel листа на пайтоне, вместо си-шарпа.

                                                                    А по по поводу "зачем переписывать книгу" - так доступнее.
                                                                    • 0
                                                                      а для платформы .NET есть отличая вещь - Boo (http://boo.codehaus.org/) пайтоноподобный язык ориентированный под CLR. отлично интегрируется с шарпом. я даже писал когда-то простую статью как сделать смешанный проект на двух языках :)
                                                                      есть кончено и "родной" IronPython - но у него вечный проблемы с динамической памятью
                                                                    • +1
                                                                      Вы делаете хорошую и правильную работу, создавая этот цикл для начинающих.

                                                                      Есть, правда, небольшое замечание - не используйте, пожалуйста, cp1251 и прочие такие, казалось бы, малозначимые штучки, специфические для одной платформы. Здесь много людей, которые используют совсем не платформу от ребят из Редмонда. Да и вообще, cp1251, koi8-r - это же всё уже устарело лет на 15, зачем пользоваться этим, когда есть Unicode ?
                                                                      • 0
                                                                        но много и тех кто используют :) не будем холиворить...
                                                                        хотя я честно написал что Юникод - всегда лучше :))) если доберусь до модуля os - безусловно озвучу версию что *nix вариант представляет куда больше возможностей ;)
                                                                      • 0
                                                                        Ещё если к строке добавить префикс , то получим так называемые raw строки:

                                                                        >>> s = r"Это достаточно длинная строка содержащая\n\
                                                                        несколько строк текста."

                                                                        >>> print s
                                                                        Это достаточно длинная строка содержащая\n\
                                                                        несколько строк текста.

                                                                        Таким образом обратный слэш и символ перевода строки так же выводятся.
                                                                        • 0
                                                                          спасибо :)
                                                                          я это просто отложил на попозже...
                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                          • +1
                                                                            Предлагаю на суд общества особую, однопроходную реализацию.

                                                                            Также отмечу, что для задания кодировки более чем достаточно просто написать # coding: utf8 (или koi8-r, или cp1251, или cp866), не занимаясь лишним украшательством звёздочками и черточками.
                                                                          • 0
                                                                            У меня вопрос:

                                                                            """
                                                                            Файл test.txt содержит строку Привет в Win1251
                                                                            """
                                                                            f = open('test.txt', 'r')
                                                                            s = f.readline()
                                                                            f.close
                                                                            print s.encode('utf-8');

                                                                            а получаем ошибку:
                                                                            Traceback (most recent call last):
                                                                            File " ", line 74, in run_nodebug
                                                                            File "E:\Python24\Work\Plurk\test.py", line 7, in
                                                                            print unicode(s, 'utf-8');
                                                                            UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-2: invalid data

                                                                            А вообще мне нужно получить строку типа '\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82' для urllib2.
                                                                            Как получить такую перекодировку?
                                                                            • 0
                                                                              .encode() работает только для Unicode строк
                                                                              • 0
                                                                                точнее даже не так сказать
                                                                                http://www.reportlab.com/i18n/python_uni…
                                                                                вот тут точнее сформулировано
                                                                                • 0
                                                                                  А после s = f.readline() у меня строка не Unicode уже?
                                                                                  А если нет, то как её сделать Unicode, что бы потом в UTF-8 перевести?
                                                                                  • 0
                                                                                    на самом деле мне нужно получить: "\u041f\u0440\u0438\u0432\u0435\u0442" из строки. Что это вобще за кодировка и как её в Python получить?
                                                                              • 0
                                                                                s = raw_input()
                                                                                dln = s.split()
                                                                                dln.sort()
                                                                                print dln
                                                                                print dln[-1]

                                                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.