Быстрый в изучении - мощный в программировании
>> Telegram ЧАТ для Python Программистов

Свободное общение и помощь советом и решением проблем с кодом! Заходите в наш TELEGRAM ЧАТ!

>> Python Форум Помощи!

Мы создали форум где отвечаем на все вопросы связанные с языком программирования Python. Ждем вас там!

>> Python Канал в Telegram

Обучающие статьи, видео и новости из мира Python. Подпишитесь на наш TELEGRAM КАНАЛ!

Archy

Как я выбирал чехол для Macbook PRO

1 июня 2013 г. Archy Общие вопросы 2

чехол для Macbook PRO

В чем же заключается великолепие чехла для ноутбука MacBook? Выбирая чехол для защиты Вашего MacBook Pro 13 необходимо точно знать структуру чехла.

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

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

Далее...

Чтение из файла на Python

Чтение из файла на Python

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

# -*- coding: utf-8 -*-
f = open('power.txt')
line = f.readline()
while line:
    print (line),
    line = f.readline()
f.close()

Функция open() возвращает новый файловой объект. Вызывая методы этого объекта можно выполнять разные действия над файлом, такие как чтение и запись. Метод readline() который мы использовали в примере выше, читает одну строку из файла, завершая символом перевода строки. Используя данный метод, для чтения файла нам понадобится цикл while, и в теле цикла вызывать readline() чтобы читать следующею строку. После чтения всего файла, метод возвращает пустую строку т.е. False, вот тогда цикл while и завершает свою работу.

Можно читать из файла построчно не используя при этом цикл while, данный способ более прост и читабельней.

# -*- coding: utf-8 -*-
f = open('power.txt')
for line in f.readlines():
    print (line),
Метод readlines() отличается одной добавленной буквой и строит обратить внимание на это, часто ошибаются и используют readline() и не понимают почему выдают всего лишь одну строку. readline() и readlines() выполняют одну и ту же операцию - читаю построчно данные из файла, но возвращают разные данные. readlines() возвращает список в котором содержится строки из файла.

Далее...

Отправка писем из Python SMTPlib

Python SMTPlib

Недавно пришлось написать небольшой скрипт для рассылки писем к читателям с одного проекта. На PHP у меня уже ранее реализован данный скрипт, но т.к. я перешел программировать на Python мне нужно больше практики для понимания языка. Хочу сказать, что по сравнению с PHP, собственная smtp библиотека от Python гораздо удобнее для настройки в случае если нам нужна аутентификация с другого почтового сервиса.

Плюсы и минусы

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

В PHP мне иногда приходилось мучится с кодировкой. Когда проверяешь и видишь, что все в порядке с кодировкой но письмо опять с иероглифами, это очень сильно бесит. Несмотря на то, что в Python, модуль smtplib принимает текст письма исключительно в ASCII, проблема с русским языков исчезает сразу если указать кодировку в самом скрипте т.е.

Далее...

Копирование файлов в Python

Копирование файлов в Python

Перемещать и копировать файлы по каталогам нам поможет функции модуля shutil. Подключаем модуль shutil в начале нашего скрипта на Python, потом уже получим доступ к его функциям. Функции модуля shutil не ограничиваются только на копирование и перемещение, мы обсудим разные методики использования функции даного модуля.

Функция copyfile(Копируемый файл, путь куда копируем)

Копирует содержимое файла по указанному пути и создает новый в указанном во втором параметре месте. Методанные при этом не копируются т.е. права доступа и т.д. Если место куда мы копируем уже имеет такой файл он будет перезаписан. В случае неудачи копирования, возбуждается исключение IOError.

>>> import shutil # Подключаем модуль
>>> shutil.copyfile(r'/home/py/mouse.txt', r'/home/py/new-mouse.txt')
>>> # Указанный путь не будет существовать
>>> shutil.copyfile(r'/home/py/mouse.txt', r'/go/here/no.txt')
IOError: [Errno: 2] No such file or directory
'/go/here/no.txt'

Функция copy(Копируемый файл, куда копируем)

Копирует файл вместе с его правами. В случае если файл уже существовал, он будет перезаписан. Неудачное копирование вызовет исключение IOError.

shutil.copy(r'my_file.txt', r'new_file.txt')
Далее...

Модуль datetime

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

Классы, предоставляемые модулем datetime:

Класс datetime.date(year, month, day) — стандартная дата. Атрибуты: year, month, day. Неизменяемый объект.

Класс datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None) — стандартное время, не зависит от даты. Атрибуты: hour, minute, second, microsecond, tzinfo.Далее...

Python работа с FTP - Модуль ftplib

Клиентская часть в Python реализуется при помощи модуля ftplib. Использовать непосредственно данный модуль на практике приходится не так часто, в связи с тем, что есть другой модуль urllib, имеющий более высокоуровневый интерфейс. Модуль ftplib может пригодится когда в вашей программе необходим более обширный контроль над низкоуровневыми FTP соединениями. Для более понятной работы с модулем ftplib советуем поближе изучить протокол FTP.

Модуль определяет единственный класс, используемый для создания FTP-соединения:

con = FTP(хост, ftp-пользователь, пароль пользователя, учетная запись, время ожидания)

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

Вызывая класс без аргументов, чтобы установить соединение, потребуется вызвать метод connect() и login(). При указании лишь аргумента хост, метод connect() будет вызываться автоматически в конструкторе. Тот же случай при указании данных пользователя сразу при вызове класса FTP, метод login() будет вызван автоматически. Последний аргумент "время ожидания" указывается в секундах, если по истечению данного срока соединение не будет установлено класс закончит работу.

Методы класса FTP

con.abort()

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

con.close()

Закрывает FTP-соединение. После выполнения данного метода, никакие операции больше не могут выполнятся в сторону объекта con.

con.connect(хост, порт, время ожидания)

Открывает новое FTP соединение для указанного хоста, подключаясь к указанному порту (обычно это порт 21 или в случае SFTP 22). Если данные подключения уже ранее передавались конструктору FTP, нет необходимости вызывать метод con.connect()

con.cwd(путь к папке)

Выполняет переход по указанному пути тем самым изменяя текущий рабочий каталог.

con.delete(путь до файла)

Удаляет указанный файл с сервера.

Далее...

Синхронизация потоков в Python

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

Для примера представьте программу на Python, обрабатывающую какие-нибудь данные и отслеживающую, сколько элементов было обработано:

counter = 0
def process_item(item):
    global counter
    ... do something with item ...
    counter += 1

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

Если другой поток получает управление в тот момент, когда текущий поток получил значение переменной, он может выполнить вышеописанные 3 шага до того, как их выполнит текущий поток. А так как оба потока получили одно и то же начальное значение переменной, то переменная будет увеличена лишь на 1.

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

Атомарные операции

Простейший способ синхронизировать доступ к разделяемым данным или ресурсам - положиться на атомарные операции в интерпретаторе. Атомарная операция - операция, выполняемая за 1 шаг, без возможности прерывания её другим потоком.

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

Далее...

Программирование Web-клиента - мощная техника для создания запросов в Web. Web-клиент - это любая программа, извлекающая данные с Web-сервера при помощи протокола передачи гипертекста (Hyper Text Transfer Protocol, http в ваших URL). Web-броузер является клиентом, так же, как и поисковики, то есть программы, автоматически перемещающиеся по Web для сбора информации. Вы можете также применять Web-клиенты для использования возможностей сервисов, предлагаемых другими обитателями Web, и добавления динамических свойств в ваш собственный Web-сайт.

Программирование Web-клиента входит в любой набор инструментов для разработчиков. Приверженцы Perl'а используют его многие годы. В языке Python этот процесс достигает даже более высоких уровней удобства и гибкости. Большинство необходимых вам функций обеспечивается тремя модулями: HTTPLIB, URLLIB и новым дополнением, XMLRPCLIB. В истинно Питоновском стиле каждый модуль надстроен над своим предшественником, обеспечивая таким образом прочную, хорошо спроектированную базу для ваших приложений. В этой статье мы рассмотрим первые два модуля, оставив XMLRPCLIB на потом.

Для наших примеров мы будем использовать Meerkat. Если вы похожи на меня, вы тратите время на отслеживание тенденций и событий в среде создателей открытых программных средств, которые позволят вам получить конкурентные преимущества. Meerkat представляет собой инструмент, значительно упрощающий эту задачу. Это служба открытого доступа (an open wire service), собирающая и упорядочивающая огромные объемы информации по открытым программным средствам. Поскольку его интерфейс для браузера гибок и настраиваем, то, используя программирование web-клиента, мы можем сканировать, извлекать и даже сохранять эту информацию для последующего использования в автономном режиме. Сначала мы обратимся к Meerkat с помощью HTTPLIB в интерактивном режиме, а затем перейдем к работе с Meerkat's Open API через URLLIB, чтобы создать настраиваемое средство сбора информации.

Далее...

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

В Python имеются исключения и механизм их перехвата; таким образом программист может построить правильную обработку ошибок и создать надежную программу. Встроенные механизмы интроспекции позволяют опрашивать интерфейсы объектов во время выполнения программы. Например, можно узнать количество и имена параметров функции; эту интроспекцию использует Zope, чтобы подготовить правильный список параметров функции при вызове ее из web.

Из современных языков Python можно сравнить в первую очередь с Java и Perl. Python выполняет все обещания, которые дала, но не выполнила Java. Python очень хорошо переносим. Он работает на всех платформах, на которых есть Java, и еще на многих. Мало найдется таких платформ, на которые Python не перенесен. Я не говорю про UNIX и Windows, конечно - с точки зрения переносимости куда интереснее такие платформы как Mac, Amiga, Palm, RiscOS, AS/400 и многие другие. Для особых любителей Java есть Jython. Он состоит из двух частей: во-первых, это интерпретатор Pyhon, написанный на Java, а во-вторых это компилятор Python в байт-код Java. В сравнении с Perl - Python как язык ему совершенно равномощен, но избавлен от великого множества неприятностей и неудобств, присущих Perl. Python обладает богатой стандартной библиотекой, плюс великим множеством модулей, доступных в Интернете. Для пользователей Windows есть пакет win32, из которого доступны практически все функции Windows API, DDE, COM.

Далее...

Определение страны по IP-адресу Python

При сборе статистики посещения web-страниц часто собирается информация о количестве посетителей из разных стран. Как правило, страну определяют по домену первого уровня. Но такая информация не всегда соответствует действительности, особенное учитывая нынешнюю тендецию использовать национальные домены co, tv не по назначению. Кроме того, как быть с доменами общего пользования net, org, com и др.? С IP-адресами, для которых нет записей в реверсной зоне? Ну и, наконец, определение доменного имени отнимает заметное количество времени.

Приведенный в статье код распространяется под лицензией в стиле Python, то есть может быть использован для любых (в том числе коммерческих целей) при условии сохранения замечания об авторском праве Copyright © 2002, Denis S. Otkidach .

Данные о регистрации диаппазонов IP-адресов хранятся в базах данных whois. Чтобы предоставить возможность общественности анализировать трафик, RIPE NCC, ARIN и APNIC не реже, чем раз в месяц, делают сокращенные "снимки" своих баз данных. Именно из этих данных мы и составим локальную базу.

Но сначала нужно эффективно оргазовать хранение данных для диаппазонов IP-адресов, чтобы обеспечить к ним быстрый доступ. За основу возмем BTree базу BerkleyDB, доступ к которой обеспечивает функция btopen() из стандартного модуля bsddb. В качестве ключей будем использовать начало диаппазона IP-адресов, а в качестве значений — его конец и дополнительную информацию. Ключи и значения в bsddb должны быть строками. Кроме того, необходимо обеспечить упорядоченность ключей. Для этого очень хорошо подходит функции inet_aton и inet_ntoa из модуля socket.

Далее...