Статьи с тегом python2.x

Python tips & tricks

Base python tips & tricks

Недавно прочитал книгу Марка Лутца "Learning Python", 5-ое издание. Привожу список самых интересных фишек (по моему мнению) оттуда, что-то вроде конспекта.

  • генерация set'a:

    {x for x in [1,2]}
    set(x for x in [1,2])
    assert set(x for x in [1,2]) == {x for x in [1,2]}
    
  • генерация dict'а:

    {x:x**2 for x in [1,2]}
    dict((x, x**2) for x in [1,2])
    assert {x:x**2 ...

Добавлено 2015-04-30

Python logging на каждый день

В процессе написания программы, скрипта, часто бывает нужно вывести какую-либо отладочную информацию или сообщить о каком-то событии. Известно, что для этих целей есть встроенный модуль logging. Однако обычно у меня бывает так: времени в обрез, а все эти настройки логов (handlers, loggers, formatters и пр.) никак не могу запомнить, и на скорую руку вставляю просто print. Потом, если скрипт используется часто или его надо отдать заказчику - хочется чтобы все эти сообщения записывались в файл ...

Добавлено 2013-08-20

Форматирование unicode строк

Вы знали, что если одно из значений строкового выражения с оператором % - unicode, то вся результирующая строка будет тоже unicode?

>>> "Hello, %s" % u"Alex"
u'Hello, Alex'
>>> "Hello, %s" % u"Алексей"
u'Hello, \u0410\u043b\u0435\u043a\u0441\u0435\u0439'

Я привык пользоваться методом .format для форматирования строк и его поведение мне больше нравится: тип исходной строки всегда сохраняется, а если в качестве параметра даются не ascii символы, то возбуждается исключение UnicodeEncodeError.

>>> "Hello, {0}".format(u ...

Добавлено 2013-06-20

Парсинг url'а, содержащего unicode параметры, используя urlparse.parse_qs

Задача: получить словарь параметров URL'a. Например, имеем адрес:

http://example.com/?key=value&a=b

и нужно получить такой словарь:

{'key': ['value'], 'a': ['b']}

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

In: http://example.com/?key=value&a=b&a=c
Out: {'key': ['value'], 'a': ['b', 'c']}

В python'е для этих целей есть функция urlparse.parse_qs, которая делает следующее:

>>> import urlparse
>>> query = "key=value&a=b"
>>> urlparse ...

Добавлено 2013-05-22

Функции с изменяемыми значениями по умолчанию в python'e

Python mutable default arguments

В python'е значения функции по умолчанию создаются в момент выполнения инструкции def, а не при каждом вызове функции. Если значение - неизменяемый объект (например строка, целое число, кортеж), то никаких подводных камней здесь нет. А вот если объект изменяемый (например список), то есть возможность попасть в ловушку. Вот пример:

    def foo(l=[]):
        l.append('x')
        return l

Казалось бы, при каждом вызове foo() будет возвращаться список ['x']. Но:

    >>> foo()
    ['x']
    >>> foo()
    ['x', 'x']
    >>> foo()
    ['x ...

Добавлено 2013-03-05

Скрипт для скачивания музыки вконтакте

Vkontakte audio download

Беглый поиск соответствующего скрипта на python'е не дал результов. В статье на хабре ссылка не работает. Решил написать свой велосипед, он доступен здесь.

Запуск (нужен установленный python интерпретатор):

python vkcom_audio_download.py

Проверял на python 2.6 и 2.7. Никаких дополнительных библиотек не требуется.

Принцип работы:

Скрипт проверяет сохраненный access_token. Если его нет или срок истек, то открывается страница в браузере с запросом на доступ к данным аккаунта (аудио записям). После подтверждения идет ...

Добавлено 2013-02-04

MobileESP: Скрипт определения мобильного устройства посетителя

Скрипт полезен, если вы хотите показывать разные версии сайта для обычных компьютеров и мобильных устройств. Большое количество методов для определения вида девайса. Доступен на разных языках программирования, включая python. Собственно порт на python был написан мной по просьбе freelance заказчика.

Так его можно использовать в django проекте:

from mobileesp import mdetect

user_agent = request.META.get("HTTP_USER_AGENT")
http_accept = request.META.get("HTTP_ACCEPT")
if user_agent and http_accept:
    agent = mdetect.UAgentInfo(userAgent=user_agent, httpAccept=http_accept)
    # устройство посетителя - новый ...

Добавлено 2012-11-29

Отладка django проекта с помощью встроенного python отладчика pdb

Я использую sublime-text в качестве редактора python кода. В нем нет встроенного отладчика, поэтому для отладки django проектов я в основном делал так:

print var_name

и в консоле локального сервера смотрел вывод команды. Я использую этот метод и сейчас, но иногда хочется пройтись по коду по шагам, посмотреть все переменные.

Это можно сделать с помощью встроенного python отладчика pdb:

import pdb; pdb.set_trace()

Т.е. мы вставляем эту строку в то место в коде, где ...

Добавлено 2012-11-18

Облачный сервис Openshift

Openshift логотип

Я знаю немного хостингов с бесплатным тарифом и с поддержкой python. Это Google App Engine и Alwaysdata. И вот недавно узнал про замечательный проект Openshift от RedHat, на котором и работает этот блог. Для начала небольшой обзор упомянутых хостингов.

Google app engine

Основной недостаток google app engine - ограниченный набор библиотек, которые можно использовать. Конечно, чисто python библиотеки можно ставить, но те, которые требуют C компиляции - нет. К примеру, не получится использовать pycurl. Так же на ...

Добавлено 2012-10-08

Этот сайт

Особенности:

  • работает на python+django
  • дизайн twitter bootstrap
  • в основе мой форк django-articles-transmeta блог-движка django-articles. В форке добавлена возможность перевода статей (джанго моделей)
  • работает в облаке на openshift
  • есть полнотекстовый поиск, сделан с помощью haystack + whoosh
  • многоязычность (русский и английский)
  • код лежит на github

Часто читая чужие блоги у меня мелькала мысль создать свой, но все не хватало времени взяться за это. Еще думал, что мне в нем писать? Наконец-то собрался, выделил время и вот ...

Добавлено 2012-08-28