Обновить
1024K+

Python *

Высокоуровневый язык программирования

681,69
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Немного о Pivot tables в PostgreSQL и Python

Время на прочтение8 мин
Охват и читатели38K
Доброго времени суток.

Работая в институте, мне приходится иметь дело с большим количеством полу-структурированной информации. Здесь приставка «полу» значит, что в целом все данные похожи, но, как правило, распиханы в локальных папках на компьютерах у сотрудников, в .xls, .txt или в бинарном формате. Информация представляет из себя данные полученные с различных приборов( датчиков уровня, температуры, скорости течений, атмосферного давления, влажности и так далее до 20-30 различных параметров). Все приборы выгружают данные каждый в своем формате: либо в ascii либо бинарный формат, который потом обрабатывается, и, на выходе, снова получаются ascii. Ну вообщем все как всегда, вы и сами представляете весь этот хаос.

Захотелось мне все это дело запихнуть в одну общую базу данных, что бы не искать нужные данные нужной версии в нужной папке, что занимает крайне много времени. Опыт разработки различных систем (в основном гео-информационных) имеется. Но то, что делалось раньше, содержало в себе исключительно обработанные данные, и в целом все эти системы делались под заказчика. Никакого комплекса автоматизации для самих себя не было.

Обработка всего этого хозяйства — вполне стандартные вещь, ничего нового и интересного: проверка временных рядов на целостность(если нужна – интерполяция), построение кучи различных графиков, запуск различных моделей на этих данных, обработка вывода моделей(снова куча графиков), вывод статистики. О последней я и расскажу в этой статье.

Читать дальше →

Гвидо ван Россум перешёл из Google в Dropbox

Время на прочтение1 мин
Охват и читатели25K
Автор языка программирования Python Гвидо ван Россум в пятницу отработал последний день в Google, а с января будет зачислен в штат компании Dropbox. Руководители Dropbox с радостью приветствуют Гвидо. Они называют его старым другом, помогавшим создавать Dropbox «с первых строчек кода» (dropbox.py).

«С самого начала было понятно, что Dropbox должен поддерживать все основные операционные системы. Исторически, такая поддержка требовала серьёзных усилий от разработчиков: поскольку для каждой платформы нужны различные средства разработки и языки программирования, приходилось переписывать тот же код несколько раз, — пишет основатель Dropbox Дрю Хьюстон в официальном блоге. — У нас не было на это времени. К счастью, нашим спасением стал язык программирования Python».
Читать дальше →

Частотный анализатор английских слов, написаный на python 3, умеющий нормализовывать слова с помощью WordNet и переводить с помощью StarDict

Время на прочтение21 мин
Охват и читатели35K
Привет всем!
Я учу английский и всячески упрощаю этот процесс. Как-то мне потребовалось получить список слов вместе с переводом и транскрипцией для определенного текста. Задача не была сложной, и я принялась за дело. Чуть позднее был написан скрипт на python, все это умеющий, и даже умеющий чуть больше, поскольку мне захотелось получить еще и частотный словарь из всех файлов с английским текстом внутри. Так вышел маленький набор скриптов, о котором я и хотела бы рассказать.
Работа скрипта заключается в распарсивании файлов, выделении английских слов, нормализации их, подсчете и выдачи первыx countWord слов из всего получившегося списка английских слов.
В итоговом файле слово записывается в виде:
[число повторений] [само слово] [перевод слова]

О чем будет дальше:
  1. Мы начнем с получения списка английских слов из файла (используя регулярные выражения);
  2. Дальше начнем нормализовывать слова, то есть приводить их с естественной формы в тот вид, в котором они хранятся в словарях (тут мы немного изучим формат WordNet);
  3. Затем мы подсчитаем количество вхождений у всех нормализованных слов (это быстро и просто);
  4. Дальше мы углубимся в формат StarDict, потому что именно с помощью него получим переводы и транскрипцию.
  5. Ну и в самом конце мы куда-нибудь запишем результат (я выбрала файл формата Excel).

Читать дальше →

WebSocket-чат на Tornado для вашего Django-проекта

Время на прочтение28 мин
Охват и читатели68K
TornadoНедавно я запустил сайт backgrounddating.com и написал об этом здесь, на Хабрахабре. Разумеется, я уже тогда рассказал о некоторых технических деталях реализации этого проекта, но об одной из возможностей сайта я бы хотел написать отдельно, тем более, что документации (как на русском, так и на английском) на эту тему в Интернете пока что довольно мало. Итак, речь пойдёт о чате в реальном времени между двумя пользователями. Задача состоит в том, чтобы любой пользователь мог отправлять другим пользователям сообщения, и, если у получателя сообщения открыт чат с этим пользователям, то он сразу же видел входящие сообщения (а в ином случае он мог прочитать сообщения позже: то есть при открытии чата загружается история последних сообщений).

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

Сразу уточню, что это не единственный способ реализовать подобное. Вы можете использовать другой асинхронный веб-сервер (например node.js), можете использовать другую очередь сообщений (или вообще её не использовать, если вам подходят особенности такого варианта: с пользователями одного канала обязательно общается один и тот же worker веб-сервера). Я даже не утверждаю, что этот вариант самый лучший (но в данном случае он подошёл лучше всех). В конце концов, мы здесь вообще не будем рассматривать костыли (long polling, Flash) для старых браузеров (а это почти все версии IE, например), не поддерживающих веб-сокеты, и даже не будем рассматривать возможность подключаться из тех браузеров, которые уже поддерживают протокол WebSocket, но не стандартизированную версию (RFC 6455), а одну из устаревших. О том, как можно включить поддержку устаревшей версии «draft 76» (она же «hixie-76»), смотрите в документации Tornado.
Читать дальше →

Локализация простой pygtk программы c glade формой в Linux

Время на прочтение9 мин
Охват и читатели6.2K
Сразу оговорюсь, что python и gtk у меня 2й версии.

Неожиданное желание сделать надписи на главной форме разрабатываемой мной программы не только русскими, но и на других языках (а вдруг она нужна будет не только мне), вынудило начать поиск методов реализации. С наскока найти рабочую документацию по локализации glade форм не удалось, потому было решено написать в будущем эту статью, чтобы другим повезло больше.

Чего нет в этой статье:
— как делать перевод формы в процессе работы. Этого я не смог найти, а хотелось бы знать…
— как делать перевод текста в .py коде в процессе работы.
— пива, блэкджека и остального тут тоже конечно нет.

Перевод будет осуществляться с помощью указания локали при старте (или локали по умолчанию).

Читать дальше →

Декоратор cached_property

Время на прочтение3 мин
Охват и читатели28K
Как часто вы пишете такие конструкции?

class SomeClass(object):
    @property
    def param(self):
        if not hasattr(self, '_param'):
            self._param = computing()
        return self._param

    @param.setter
    def param(self, value):
        self._param = value

    @param.deleter
    def param(self):
        del self._param

Это очень удобно, значение атрибута param при таком подходе не хранится напрямую в объекте, но и не вычисляется каждый раз. Вычисление происходит при первом обращении, и это значение сохраняется в объекте под временным именем _param. Если меняются условия, от которых зависит значение param, его можно удалить, и тогда оно снова вычислится при следующем обращении. Или можно сразу присвоить актуальное значение, если таковое известно.

У этого кода есть и минусы: у объекта появляется лишний атрибут с именем _param; при каждом обращении к атрибуту вызывается метод param(), который делает проверку hasattr; получившийся код достаточно большой, особенно если таких атрибутов в классе несколько.
Читать дальше →

HowTo: Как подружить Django с WebSocket (socket.io, sockjs)

Время на прочтение10 мин
Охват и читатели34K
Version: 0.2

Возникла у меня потребность атомарного обновления в реальном времени страницы у некоторого количества пользователей в зависимости от действий других пользователей (не гербалайф чат). Понятное дело, можно всё выкинуть в помойку и, по-молодецки, запилить с нуля на tornado/twisted.web, но явно не самый продуктивный путь (да и я не мо́лодец ни разу) когда всё что надо — уже работает на Django и нужно всего-то чуть-чуть… Естественным образом, по сути своей, сюда просится WebSocket. И всё бы ничего но Django WSGI приложение, а этот стандарт не предполагает таких выкрутасов даже близко (пока). Гугления интернетов навели, в очередной раз, на труд известного python-гуру kmike (это без сарказма, т.к. его работы выручали меня лично уже не однократно, за что нижайший ему поклон!).

Итак если вы хотите скрестить ваш Django проект с websocket посредством js библиотеки socket.io или sockjs — вилькоммен!
Читать дальше →

Использование RabbitMQ в django проектах без Celery, и что нового в Celery 3.0

Время на прочтение8 мин
Охват и читатели35K
Думаю что большинство python программистов уже в какой-то степени знакомы с возможностями Celery. В 1-ой части я расскажу, как можно использовать RabbitMQ без celery, а во второй части — краткий обзор новых возможностей celery 3.0.
Об установке связки Django-Celery-RabbitMQ можно почитать тут.
Про использование RabbitMQ хорошо написано тут, и тут, ну и на сайте RabbitMQ.
Читать дальше →

Сложные формы в Django

Время на прочтение9 мин
Охват и читатели28K
image
Добрый день. Постараюсь рассказать о сложных формах в Django. Все началось, когда в моем дипломе понадобилось сделать форму, которая состояла бы из других форм. Ведь если у вас есть две формы, которые вы используете, и тут понадобилась другая, которая является просто контейнером тех двух, вы же не будете создавать новую, копируя в неё все поля из старых, это очень тупо. Поэтому надо как-то их объединить. В свое время было FormWizard в Django, но он был крайне не удобным так что в новой версии её переделали на WizardView. Django конечно MVC, но я в статье все как можно детально постараюсь продемонстрировать, а потом уже можно все сжать используя ModelForm и циклы в шаблонах.
Поглядим на наши модели, ничего особенного, но чтобы было понятней, продемонстрируем.

Читать дальше →

Python — оптимизация хвостовой рекурсии

Время на прочтение1 мин
Охват и читатели34K
Не секрет, что Python не оптимизирует хвостовую рекурсию. Более того сам Гвидо является противником этого. Но если кому нужно, есть небольшое изящное решение. Под катом…
Читать дальше →

Проблемы в библиотеке форм Django на примере поля ввода телефонов

Время на прочтение5 мин
Охват и читатели10K
Как известно, в состав Django входит библиотека для генерации и обслуживания html-форм. Когда-то с Django в комплекте шла другая библиотека форм, но потом она была полностью переписана. Наверное, тогда разработчики решили много архитектурных проблем. Но и при работе с текущей библиотекой есть некоторые сложности. Именно об этом я и хочу поговорить.

Итак, задача. Пользователи очень любят оставлять на сайтах свои телефоны и другую приватную информацию. Причем, делать это они хотят, не задумываясь о том, как правильно её ввести: 8(908)1271669 или, скажем, 908 127 16 69. Посетители сайта очень любят видеть правильные телефоны, желательно единообразно оформленные: (+7 495) 722-16-25, +7 968 127-31-32. Получается, нужно валидировать и хранить номера в нормализованном виде, то есть без оформления. В поле, про которое я буду рассказывать, можно ввести больше одного номера телефона. Формат хранения определим как последовательности из 11 цифр, разделенные пробелом.
Читать дальше →

Создание анимации средствами Python 2.7

Время на прочтение8 мин
Охват и читатели60K
Эта статья познакомит вас с основами создания анимации с использованием Python и Pyglet. Pyglet разработан для работы с 3D графикой, но в этой статье мы будем использовать его для создания очень простой 2D анимации. В частности, мы познакомимся с базовыми приемами использования Pyglet (разработка кода для создания и воспроизведения анимации) и создадим анимацию с помощью последовательности изображений.

Итак, приступим…

Анимация представляет собой последовательность кадров, быстро отображаемых один за другим. Это создает оптическую иллюзию движения объектов.

Читать дальше →

Скачивание музыкальной коллекции vk.com

Время на прочтение7 мин
Охват и читатели58K
Привет, хабрахабр!

Решил я как-то скачать свою музыкальную коллекцию из vkontakte (а это без малого 1000 песен). Связываться с vk.api не хотелось, поэтому решил использовать python + библиотека request. Что из этого получилось — под катом!
Читать дальше →

Ближайшие события

PyGA: использование трекинга Google Analytics в бекенде, написанном на Python

Время на прочтение2 мин
Охват и читатели6.7K
Для недавно сделанного мной в рамках изучения Flask микросервиса shares.datagreed.ru мне захотелось отслеживать переходы по разным адресам API. Как это сделать, если Google Analytics интегрируется в страницу посредством JS?

Вот и я тоже не знал. Поиск привел меня к официальной библиотеке на PHP для мобильных сайтов, на которых не предполагалось (когда-то) использовать JavaScript.

Дальнейшие мои изыскания вылились в небольшой модуль для питона, который позволяет использовать трекинг страниц (ивенты, увы, не поддерживаются) Google Analytics со стороны сервера. Штатно в библиотеку влючены классы для Django и Flask. Класс для Flask в данный момент развернут и обкатывается у меня на shares.datagreed.ru, а класс для Django я пока что не тестировал, так что багрепорты приветствуются.

Читать дальше →

Производительность в Python. Легкий путь

Время на прочтение2 мин
Охват и читатели77K
Всегда знал, что одно из достоинств Python — возможность переписать самые тормозные куски кода на Си и увеличить быстродействие программы до недостижимых интерпретируемым языкам высот. Но сам ни разу не пробовал, т.к. считал что это слишком сложно. После прочтения этой статьи больше так не считаю.

Программисты знакомые с ctypes врядли найдут тут что-то интересное, новичков же прошу под кат.
Читать дальше →

Питон в коробке – venv в python 3.3

Время на прочтение4 мин
Охват и читатели170K
Наверняка, большинство из тех, кто разрабатывает или деплоит Python приложения, использует виртуальные окружения. В частности через virtualenv, написанный Ian Bicking.

Идея оказалась так хороша и распространена, что нечто похожее теперь присутствует в Python 3.3 из коробки в виде модуля venv. Он почти такой же, как virtualenv, только немного лучше.
Читать дальше →

Абстрагирование потока управления

Время на прочтение4 мин
Охват и читатели15K
Любой программист, даже если не смотрит на свою работу в таком ключе, постоянно занимается построением абстракций. Чаще всего мы абстрагируем вычисления (пишем функции) или поведение (процедуры и классы), но кроме этих двух случаев в нашей работе возникает множество повторяющихся шаблонов особенно при обработке ошибок, управлении ресурсами, написании стандартных обработчиков и оптимизаций.

Что значит абстрагирование потока управления или «control flow», как выражаются наши заморские друзья? В случае, когда никто не выпендривается, потоком занимаются управляющие конструкции. Иногда этих управляющих конструкций недостаточно и мы дописываем свои, абстрагирующие нужное нам поведение программы. Это просто в языках вроде lisp, ruby или perl, но и в других языках это возможно, например, с помощью функций высшего порядка.
Читать дальше →

Интернационализация локального проекта django

Время на прочтение4 мин
Охват и читатели10K
Хорошо, когда при разработке проекта под django, разработчики проекта изначально озаботились его интернационализацией.

Минимальными усилиями, проект адаптируется под различные языки. Django имеет богатый набор инструментов, достаточный для почти автоматического добавления новых языков, исправления и добавления переводов отдельных участков текста и так далее.

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

Читать дальше →

MongoDb for developers. Неделя 1

Время на прочтение7 мин
Охват и читатели47K
Вечер добрый, хабр. На прошлой неделе стартовал курс «MongoDb for developers» от 10gen, о котором уже писали на хабре. Если вы смотрели уроки, то можете смело проходить мимо. Остальным — добро пожаловать.

В этой статье будет изложен основной материал первой недели обучения. Если аудитория проявит интерес — то подобные посты будут выходить в конце каждой недели.

Мы вкратце рассмотрим, что представляет собой MongoDB, сравним разницу в структурах данных между монго и реляционными базами для простого веб-приложения, поиграемся с шеллом, и немножко покодим на пхп и питоне.

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

Массовая запись с камер на выборах

Время на прочтение4 мин
Охват и читатели19K
Внимание. Хабр — не для политики. Пожалуйста, воздержитесь от обсуждения оной в комментариях.
В предверии первых выборов в России, в ходе которых все участки были оснащены веб-камерами, многие выражали желание записать для себя видео с камеры. Для этого предлагались разнообразные решения, от записи FRAPSом, до использования ffmpeg и так далее. Самым удачным, на мой взгляд, была утилита Qwertovsky, выложенная тут
В данном небольшом топике я хотел бы предложить свое решение и вкратце напомнить, как вообще работает вся эта система, благо что завтра состоятся парламентские выборы на братской Украине, за ходом которых любой желающий может наблюдать на сайте vybory2012.gov.ua.

Читать дальше