Python — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен.

Основная информация

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

Python поддерживает несколько парадигм программирования, в том числе структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное. Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений и удобные высокоуровневые структуры данных. Код в Python организовывается в функции и классы, которые могут объединяться в модули (они в свою очередь могут быть объединены в пакеты).

Рейтинг: 1
Создана 5 лет назад
Владелец root

Стена группы

Загрузка...
2 года назад
#

Начинаем работу Python + Qt5 + QML урок №1

Всем привет. Сегодня познакомимся с QML. Узнаем что это такое и с чем его едят. Создадим небольшое приложение с использованием данной технологии.


Небольшое отступление:

QML(Qt Meta Language) — декларативный язык программирования, основанный на JavaScript, предназначенный для дизайна приложений. Является частью Qt Quick, среды разработки пользовательского интерфейса, которая поставляется вместе с Qt.

В качестве примера декларативных языков можно привести SQL и HTML. Подробнее о QML можете почитать здесь: документация.

Начнем, пожалуй, с самого простого: создания окна. Создаем два файла base.qml и test.py следующего содержания:

base.qml
import QtQuick 2.0

Rectangle {
    //задаем свойства нашему прямоугольнику
    id:green_rectangle
    width: 250; height: 250
    //цвет нашего прямоугольника
    color:"green"
    //аналогично свойству border-radius
    radius: 7
}

test.py
import sys
# Класс QUrl предоставляет удобный интерфейс для работы с Urls
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication, QWidget
# Класс QQuickView предоставляет возможность отображать QML файлы.
from PyQt5.QtQuick import QQuickView

if __name__ == '__main__':

    app = QApplication(sys.argv)
    # Объект QQuickView, в который грузится UI для отображения
    view = QQuickView()
    view.setSource(QUrl('base.qml'))
    view.show()
    app.exec_()
    sys.exit()

Источник
2 года назад
#

Нескучные запросы с Django ORM Annotate и Query Expressions

Было когда-то время, когда ORM Django считалась очень милой, но абсолютно глупой. Хотя, возможность производить Annotate и Aggregate были в ней с незапамятных времён. А в версии 1.8 добавилась возможность применять функции базы данных внутри Query Expressions. И, разумеется, если начинающий джангист не испугался и дочитал вступление до этих строк, он может смело читать дальше: статья ориентирована именно на начинающих.


Некоторое время назад передо мной встала задача: выбрать из таблицы значения по пользователям. Причём, эти значения должны соответствовать определённому регулярному выражению. Но и это не конец условия: из выбранных выражений нужно вытащить substring. Опять же, по регулярке. Сделал я это довольно быстро, и захотелось поделиться опытом с тем, кто ещё не может применять Annotate и Query Expressions на практике


Источник
2 года назад
#

Scrapy: создаём краулер парсер на Python с нуля [GeekBrains]


2 года назад
#

Уроки Python. Парсинг прокси(proxy). Запросы через прокси(proxy).Requests


2 года назад
#

Python, BeautifulSoup парсинг + скачивание картинок с сервиса wallheaven.cc


2 года назад
#

Анализ дружеских связей VK с помощью Python


Все началось со статьи, в которой рассказывалось о построении социальных графов с помощью Wolfram Mathematica. Тогда не смог пройти мимо, и мой доклад будет о том, как все это сделать на любимом Python.

2 года назад
#

Создаем бота для Skype. Шаг за шагом, через REST API и на Python


Головоломка
Когда ищешь long-polling в Skype API

Год назад Microsoft представила платформу для создания ботов под Skype. Платформа предоставляет удобный формат сообщений, можно отправлять карточки с кнопками, как в телеграмме, одним словом, выглядит все очень круто.

Недавно мне потребовалось написать бота для Skype. И несмотря на то, что тема подымалась на хабре ( например), я столкнулся с некоторыми сложностями, мне очень не хватало step-by-step гайда по работе с REST API.

На самом деле, бот для скайпа пишется довольно быстро, если знать о подводных камнях и знать где смотреть документацию. Основная идея, которую мне пришлось усвоить: Нет веб поллинга. Если Телеграмм на выбор предоставляет лонг-поллинг и вебхуки, то скайп обходится только вебхуками. Из этого вытекают следующие проблемы – общение с серверами скайпа происходят только по https, и только при наличии валидного сертификата. Придется находить доменное имя, хостинг, заморачиваться с сертификатом.

Как это сделать?

Итак, с самого начала. Допустим, что у нас есть голый хостинг ( у меня это был Raspberry Pi, на котором я тестировал бота, но это может быть и сервер на амазоне, например ). Для начала, нужно получить доменное имя и сертификат на него. Бесплатные доменные имена можно получить например здесь. Далее нам нужно получить сертификат на это имя. Это легче всего сделать с помощью Let’s Encrypt. В процессе установки сертификата выбираем опцию standalone server – certbot запустит свой сервер, чтобы проверить, что именно вы владеете этим доменным именем перед тем как выдавать сертификат на него. После того, как у вас все получилось, у вас должны быть сертификаты в папке “/etc/letsencrypt/archive”.

Теперь, когда все подготовлено к работе, начнем писать бота.

Подробнее
2 года назад
#

Об интеграции Python 3 в редактор Sublime Text


2 года назад
#

Scrapy: собираем данные и сохраняем в базу данных


Введение

Меня заинтересовал данный фреймворк для сбора информации с сайтов. Здесь были публикации по Scrapy, но поскольку детальной информации на русском языке мало, то я хотел бы рассказать о своем опыте.

Задача

Зайти на страницу со списком абитуриентов oreluniver.ru/abits?src=all_postupil. Затем пройти по каждой ссылке и собрать данные о поступивших абитуриентах и набранных ими баллах.
С самой же страницы, собрать данные о специальностях, на которые велся набор.
Сохранить все результаты в базу данных

Решение

Для решения задачи я использовал Python 2.7, Scrapy 1.1 Sqlalchemy 1, Sqlite. Установил все как описано в документации. В статье также описана установка на русском языке, там же о создании самого паука. Вот что у меня получилось.

Подробнее
2 года назад
#

Собираем данные с помощью Scrapy


Здесь уже проскакивали вскользь упоминания об этом фреймворке для сбора данных. Инструмент действительно мощный и заслуживает большего внимания. В этом обзоре я расскажу, как
  • создать паука, выполняющего GET запросы,

  • извлекать данные из HTML документа,

  • обрабатывать и экспортировать данные.


Scrapy

Установка

Требования: Python 2.5+ (3-я ветка не поддерживается), Twisted, lxml или libxml2, simplejson, pyopenssl (для поддержки HTTPS)

Без проблем установил из репозитариевUbuntu. На странице Installation guide описывается установка в других дистрибутивах Linux, а так же в Mac OS X и Windows.

Подробнее
2 года назад
#

Web Scraping с помощью python


Введение

Недавно заглянув на КиноПоиск, я обнаружила, что за долгие годы успела оставить более 1000 оценок и подумала, что было бы интересно поисследовать эти данные подробнее: менялись ли мои вкусы в кино с течением времени? есть ли годовая/недельная сезонность в активности? коррелируют ли мои оценки с рейтингом КиноПоиска, IMDb или кинокритиков?
Но прежде чем анализировать и строить красивые графики, нужно получить данные. К сожалению, многие сервисы (и КиноПоиск не исключение) не имеют публичного API, так что, приходится засучить рукава и парсить html-страницы. Именно о том, как скачать и распарсить web-cайт, я и хочу рассказать в этой статье.
В первую очередь статья предназначена для тех, кто всегда хотел разобраться с Web Scrapping, но не доходили руки или не знал с чего начать.

Off-topic: к слову, Новый Кинопоиск под капотом использует запросы, которые возвращают данные об оценках в виде JSON, так что, задача могла быть решена и другим путем.

Задача

Задача будет состоять в том, чтобы выгрузить данные о просмотренных фильмах на КиноПоиске: название фильма (русское, английское), дату и время просмотра, оценку пользователя.
На самом деле, можно разбить работу на 2 этапа:
  • Этап 1: выгрузить и сохранить html-страницы

  • Этап 2: распарсить html в удобный для дальнейшего анализа формат (csv, json, pandas dataframe etc.)


Подробнее
3 года назад
#

Python: Работа с базой данных, часть 1/2: Используем DB-API


Python DB-API – это не конкретная библиотека, а набор правил, которым подчиняются отдельные модули, реализующие работу с конкретными базами данных. Отдельные нюансы реализации для разных баз могут отличаться, но общие принципы позволяют использовать один и тот же подход при работе с разными базами данных.

Python DB-API
В статье рассмотрены основные методы DB-API, позволяющие полноценно работать с базой данных. Полный список можете найти по ссылкам в конец статьи.

Требуемый уровень подготовки: базовое понимание синтаксиса SQL и Python.

Подробнее
3 года назад
#
Тонкости построения сетевых моделей в Python

Что является основным инструментом, который использует руководитель при управлении проектом? Принято считать, что основным инструментом руководителя проекта является календарный план, в основе которого лежит сетевая модель работ по проекту. Однажды мне довелось реализовать сетевую модель работ на языке Python (код и описание здесь). Ниже приведены уроки, извлеченные по результатам проделанной работы.

Сначала создай работы, потом устанавливай связи

При построении сетевой модели часто возникает вопрос, в каком порядке создавать работы и устанавливать связи между ними? Наиболее очевидным является двухэтапный подход – сначала создаются все работы модели, затем между ними устанавливаются связи. Такой подход позволяет избежать ошибок типа KeyError: '101', возникающих при параллельном выполнении этих двух операций, когда система пытается установить связь с работой, которая еще не была создана.

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

Пересчитывай модель после её построения

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

Для сравнения были реализованы две функции:

  1. build_model_by_method() – построение с пересчетом модели;

  2. build_model_by_assignment() – построение без пересчета модели.


После чего проведено сравнение времени их выполнения на моделях из 100, 1000 и 10000 работ.

# network.py
from predict import Activity
import xml.etree.ElementTree as ET
import sys
import timeit
from timeit import Timer
def build_model_by_method(filename):
    sys.setrecursionlimit(10000)
    f = open(filename,'r')
    tree = ET.parse(f)
    root = tree.getroot()
    schedule = {}
    next = {}
    for child in root.findall('Activity'):
        id = None if child.find('id').text == None else child.find('id').text
        start_date = None if child.find('start_date').text == None else int(child.find('start_date').text)
        finish_date = None if child.find('finish_date').text == None else int(child.find('finish_date').text)
        duration = None if child.find('duration').text == None else int(child.find('duration').text)
        not_early_date = None if child.find('not_early_date').text == None else int(child.find('not_early_date').text)
        a = Activity(id, start_date, finish_date, duration, not_early_date)
        schedule[id] = a
        next_activity = '' if child.find('next_activity').text == None else child.find('next_activity').text
        next[id] = next_activity
    for key in schedule:
        if next[key] != '':
            for next_id in next[key].split(';'):
                schedule[key].append_next(schedule[next_id])
    sys.setrecursionlimit(1000)

def build_model_by_assignment(filename):
    f = open(filename,'r')
    tree = ET.parse(f)
    root = tree.getroot()
    schedule = {}
    next = {}
    for child in root.findall('Activity'):
        id = None if child.find('id').text == None else child.find('id').text
        start_date = None if child.find('start_date').text == None else int(child.find('start_date').text)
        finish_date = None if child.find('finish_date').text == None else int(child.find('finish_date').text)
        duration = None if child.find('duration').text == None else int(child.find('duration').text)
        not_early_date = None if child.find('not_early_date').text == None else int(child.find('not_early_date').text)
        a = Activity(id, start_date, finish_date, duration, not_early_date)
        schedule[id] = a
        next_activity = '' if child.find('next_activity').text == None else child.find('next_activity').text
        next[id] = next_activity
    for key in schedule:
        if next[key] != '':
            for next_id in next[key].split(';'):
                schedule[key].next_activity.append(schedule[next_id])

print('Test for 100 activities:')

t1 = Timer("build_model_by_method('data/activity_100.xml')", "from __main__ import build_model_by_method")
print("build_model_by_method", t1.timeit(number = 1000))

t2 = Timer("build_model_by_assignment('data/activity_100.xml')", "from __main__ import build_model_by_assignment")
print("build_model_by_assignment", t2.timeit(number = 1000))

print('Test for 1000 activities')

t3 = Timer("build_model_by_method('data/activity_1000.xml')", "from __main__ import build_model_by_method")
print("build_model_by_method", t3.timeit(number = 1000))

t4 = Timer("build_model_by_assignment('data/activity_1000.xml')", "from __main__ import build_model_by_assignment")
print("build_model_by_assignment", t4.timeit(number = 1000))

print('Test for 10000 activities')

t5 = Timer("build_model_by_method('data/activity_10000.xml')", "from __main__ import build_model_by_method")
print("build_model_by_method", t5.timeit(number = 1000))

t6 = Timer("build_model_by_assignment('data/activity_10000.xml')", "from __main__ import build_model_by_assignment")
print("build_model_by_assignment", t6.timeit(number = 1000))

Подробнее
3 года назад
#
Scrapy: собираем данные и сохраняем в базу данных

Введение

Меня заинтересовал данный фреймворк для сбора информации с сайтов. Здесь были публикации по Scrapy, но поскольку детальной информации на русском языке мало, то я хотел бы рассказать о своем опыте.

Задача
  • Зайти на страницу со списком абитуриентов oreluniver.ru/abits?src=all_postupil. Затем пройти по каждой ссылке и собрать данные о поступивших абитуриентах и набранных ими баллах.

  • С самой же страницы, собрать данные о специальностях, на которые велся набор.

  • Сохранить все результаты в базу данных


Решение

Для решения задачи я использовал Python 2.7, Scrapy 1.1 Sqlalchemy 1, Sqlite. Установил все как описано в документации. В статье также описана установка на русском языке, там же о создании самого паука. Вот что у меня получилось.

Подробнее
3 года назад
#
Парсинг ресурсов при помощи Python

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

Хочу отметить, что работа над этой статьей ещё не закончена. Если у вас есть замечания или дополнение, добро пожаловать в комментарии.

Важно

Всегда сначала посмотрите предлагает ли сайт собственный API, RSS/Atom фиды также пригодятся.

Требования

Мы будем использовать две дополнительные библиотеки для Python.

Запросы

Мы будем использовать библиотеку requests вместо urllib2, так как она во всех отношениях превосходит urllib2. Я мог бы долго это доказывать, но, как мне кажется, на странице этой библиотеки все сказано в одном абзаце:

Библиотека urllib2 предлагает нам большинство необходимых аспектов для работы с HTTP, но API оставляет желать лучшего. Она была создана в другое время и для другой сети интернет. Она требует невероятного объёма работ даже для простых задач.

Подробнее
16 17 19

Авторизация

Войдите, используя Ваш аккаунт

Войти с помощью

Пользователи