Стандартная библиотека Python

Стандартная библиотека Python

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

Содержание

Сервисы периода исполнения

Модуль sys

В этом модуле содержатся функции и константы для взаимодействия с интерпретатором Python. В этом модуле в том числе содержатся следующие переменные:

  • argv — аргументы командной строки,
  • byteorder — порядок байтов платформы, 'little' или 'big',
  • flags — объект, предоставляющий в виде атрибутов информацию о флагах, данных интерпретатору. Например, sys.flags.debug говорит о режиме отладки,
  • maxint — максимальное целое,
  • platform — идентификатор платформы, например, 'linux-i386',
  • stdin, stdout, stderr — стандартные потоки ввода, вывода и вывода ошибок,
  • version — строка с версией,

и другие.

Модуль также содержит несколько функций[1].

Модуль contextlib

Модуль содержит вспомогательные функции для поддержки оператора with[2][3].

Пример использования менеджера контекста, при котором открытый файл автоматически закрывается:

with open('myfile.dat', 'wb') as fh:
    fh.write('Мои данные')

В примере выше был использован встроенный в Python менеджер контекста. API менеджера контекста состоит из двух методов:

  • Метод __enter__, вызывается при входе в блок with. Возвращает объект, который получает параметр, заданный as,
  • Метод __exit__, вызывается при выходе управления за пределы блока with.

Модуль contextlib предлагает декоратор для создания контекстного менеджера на базе генератора:

from contextlib import contextmanager
@contextmanager
def my_context():
    try:
        yield myvalue  # значение для as
    except MyError, e:
        # обработка исключения
    finally:
        # выполняется при любом исходе

Модуль abc

Модуль определяет метакласс ABCMeta и декораторы abstractmethod и abstractproperty для определения новых абстрактных базовых классов (англ. abstract base class)[4]. Следует отметить, что абстрактный базовый класс понимается здесь в ином смысле, нежели в C++[5].

Типы данных

Стандартная библиотека расширяет набор доступных Python типов данных[6]. Имеются отдельные типы данных для даты и времени, массива, кучи, очереди, слабые ссылки, а также так называемые абстрактные базовые типы из модуля collections.

Модуль collections

Данный модуль включает в себя набор специальных типов данных — контейнеров, которые дополняют стандартные встроенные типы dict, list, set, и tuple. Например для Python 2.7: OrderedDict — упорядоченный (в порядке добавления элементов) словарь, defaultdict — словарь, вызывающий заданную функцию для отсутствующего в нём элемента, Counter — словарь, который удобно использовать для подсчёта слов, Deque — двусвязанный список, namedtuple — кортеж с возможностью доступа к элементам по именам атрибутов. Так же имеются абстрактные базовые классы Container, Sequence, Set, Mapping и другие[7][8].

Пример, демонстрирующий работу с дэком:

>>> from collections import deque
>>> d = deque('123')
>>> d[1]
'2'
>>> d.pop()
'3'
>>> d.appendleft('0')
>>> list(d)
['0', '1', '2']

Пример именованного кортежа для точки в трёхмерном пространстве:

>>> from collections import namedtuple
>>> Point = namedtuple('Point', ['x', 'y', 'z'])  # Определяем класс Точка
>>> a = Point(1.0, 2.0, 3.0)  # Экземпляр точки
>>> a.x + a.y + a.z  # Доступ по атрибутам
6.0
>>> a  # Так выглядит при печати
Point(x=1.0, y=2.0, z=3.0)
>>> a + (4.0, 5.0)  # Работает как кортеж
(1.0, 2.0, 3.0, 4.0, 5.0)

В Python 3.3 появился класс ChainMap, который позволяет создавать вложенные словари[9].

Пример, в котором поиск значения по ключу ведётся в заданном порядке в нескольких словарях:

>>> local_cfg = {'a': 4}
>>> user_cfg = {'a': 5}
>>> system_cfg = {'a': 5, 'b': 10}
>>> cm = ChainMap(local_cfg, user_cfg, system_cfg)
>>> cm['a'], cm['b']
(4, 10)
>>> local_cfg['b'] = 19
>>> cm['a'], cm['b']
(4, 19)

Взаимодействие с ОС

Модуль os

Модуль предоставляет функции переносимого интерфейса к основным сервисам операционной системы, определяет некоторые переменные (например, environ для доступа к переменным окружения)[10].

Модуль os.path

Модуль служит для манипуляций с путями к файлам в независимом от платформы виде. Пример иллюстрирует использование некоторых функций модуля:

>>> import os.path
>>> os.path.join("/tmp/1", "temp.file")  # конкатенация путей
'/tmp/1/temp.file'
>>> os.path.dirname("/tmp/1/temp.file")  # имя каталога по заданному полному пути
'/tmp/1'
>>> os.path.basename("/tmp/1/temp.file")  # имя файла по заданному полному пути
'temp.file'
>>> os.path.normpath("/tmp//2/../1/temp.file")  # нормализация пути 
'/tmp/1/temp.file'
>>> os.path.exists("/tmp/1/temp.file")  # существует ли путь?
False

Обработка текстов

Стандартная библиотека содержит несколько модулей для работы со строками и обработки текстов включают в себя следующие возможности[11].

Полезные константы и функции из модуля string

Модуль содержит различные константы, которые можно использовать при обработке текстов, например: ascii_letters (строка, содержащая все буквы из набора ASCII), ascii_lowercase, digits (строка с цифрами от 0 до 9), letters (буквы, зависят от установки локали) и т. п.

Для упрощения подстановки в строки по ключевым словам могут использоваться экземпляры класса Template. Пример иллюстрирует методы substitute и safe_substitute:

>>> from string import Template
>>> tpl = Template("""${name} has ${amount}$$. {oh}""")
>>> tpl.substitute({"amount": 100, "name": "John"})
'John has 100$. {oh}'
>>> tpl.safe_substitute({"amount": 100})
'${name} has 100$. {oh}'
>>> # Для сравнения синтаксиса, метод format для строки: 
>>> """{name} has {amount}$. {{oh}}""".format(**{"amount": 100, "name": "John"})
'John has 100$. {oh}'

Поддержка регулярных выражений: модуль re

Регулярные выражения являются мощным средством обработки текста. Модуль re содержит функции для замены (sub), разбиения строки (split), сравнения строки с шаблоном (match, search), поиска (finditer, findall) и определяет классы для скомпилированного регулярного выражения и результата сравнения. Пример:

>>> import re
>>> compiled_re = re.compile(r"[a-b][0-9]*")
>>> [m.group(0) for m in compiled_re.finditer("A1 c123 a12, b abc (b987).")]
['a12', 'b', 'a', 'b', 'b987']

Работа с байтовыми структурами в модуле struct

Модуль struct служит для конвертирования данных из строк байтов и типами данных языка Python и может применяться при работе с форматами бинарных файлов и коммуникационными протоколами. Функции pack и unpack позволяют «упаковывать» и «распаковывать» данные на основе строки формата, состоящей их кодов форматирования, например:

>>> from struct import pack, unpack
>>> pack('hh', 1, 2)  # h - код для короткого целого со знаком
'\x01\x00\x02\x00'
>>> unpack('bbbb', 'ABCD')  # b соответствует символу со знаком
(65, 66, 67, 68)

Порядок байтов многобайтных данных можно задать в строке форматирования, например:

>>> pack('!l', 1025)  # сетевой (от старшего к младшему, big-endian)
'\x00\x00\x04\x01'
>>> pack('>l', 1025)  # от старшего к младшему, big-endian
'\x00\x00\x04\x01'
>>> pack('<l', 1025)  # от младшего к старшему, little-endian
'\x01\x04\x00\x00'

В модуле также определяется класс Struct, методы которого соответствуют функциям модуля.

Форматы данных

CSV

Для чтения и записи файла в формате CSV предназначен модуль csv. Этот модуль предназначен для работы с различными диалектами: разделитель запятая, разделитель точка с запятой, разделитель табуляция (Excel). Простейший пример:

import csv
reader = csv.reader(open("some.csv", "rb"))
for row in reader:
    print row

Модуль позволяет настроить формат читаемых и записываемых файлов. Например можно выставить разделитель полей :, разделитель строк — |, символ цитирования — ` (вместо " по умолчанию).

import csv
writer = csv.writer(open("some.csv", "wb"), delimiter=':', quoting=csv.QUOTE_MINIMAL, \
                    quotechar='`', lineterminator='|')
writer.writerows([ [1997, "Ford", "E350", "ac, abs, moon", "3000.00"],
    [1999, "Chevy", "Venture `Extended Edition`", "", "4900.00"],
    [1996, "Jeep", "Grand Cherokee", "air, moon roof, loaded MUST SELL!", "4799.00"] ])

Работа с файловыми архивами

В стандартной библиотеке имеется поддержка для нескольких форматов архивов в виде следующих модулей: bz2 (bzip2), gzip (gzip), tarfile (tar), zipfile (zip), а также привязки к библиотеке zlib в виде модуля zlib[12].

Примеры для Python 2.7 и 3.2

В следующем примере в файле archive.zip будет заархивирован файл file.txt, содержащий текст «text in the file». Это ещё один пример использования менеджера контекста.

from zipfile import ZipFile
with ZipFile('archive.zip', 'w') as ziparc:
     ziparc.writestr('file.txt', 'text in the file')

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

from zipfile import ZipFile
with ZipFile('archive.zip', 'r') as ziparc:
     for fileinfo in ziparc.filelist:
         print(fileinfo.filename)

Конфигурационные файлы

Для чтения и записи конфигурационных файлов предназначен модуль ConfigParser. Этот модуль написан на чистом Python и, следовательно, платформонезависим. Синтаксис конфигурационных файлов похож на тот, что используется в INI-файлах Windows. Например:

[My Section]
foodir=%(dir)s/whatever
dir=frob
version: 1.0

В качестве разделителя ключа и значения может использоваться "=" или ":". При использовании классов ConfigParser и SafeConfigParser происходит замена строки %(<ключ>)s на значение параметра <ключ>. В указанном примере значение foodir будет равно frob/whatever.

Криптографические модули

В силу различных причин (в том числе политических — во многих странах запрещена разработка и распространение криптографического программного обеспечения без разрешения соответствующих государственных структур) поддержка криптографии в стандартной библиотеке Python весьма ограниченна и сводится к хеш-функциям .
В версии 2.5 структура крипто библиотеки была унифицирована — все хеш функции собраны в модуль hashlib и удалены бесполезные модули некриптостойкого шифрования. Ранние модули md5,hmac,sha объявлены устаревшими и будут удалены в одном из последующих релизов.

Как и в некоторых других случаях ( DB-API, Python Web Server Gateway Interface) при невозможности (или нецелесообразности) включить полноценную поддержку технологии в стандартную библиотеку были приняты стандарты на интерфейсы, предоставляемые внешними библиотеками - API для хеш-функций, API для блочных шифров. Однако далеко не все библиотеки соответствуют этим требованиям (либо в силу старости — созданы до написания CryptoAPI, либо из-за того что являются автоматически сгенерированными обертками поверх соответствующих C библиотек).

Использовать Crypto API — совместимые библиотеки достаточно просто:

 >>> import hashlib
 >>> m = hashlib.new('md5')      # создаем новый хеширующий объект с MD5 функцией
 >>> m = hashlib.md5()           # либо так
 >>> m.update("test data")       # добавляем данные
 >>> m.digest()
 '\xebs:\x00\xc0\xc9\xd36\xe6V\x91\xa3z\xb5B\x93'
 >>> m.hexdigest()
 'eb733a00c0c9d336e65691a37ab54293'

hashlib обеспечивает поддержку следующих хеш-функций: MD5, SHA-1,SHA224, SHA256, SHA384, SHA512 (в сборках Python со включенной OpenSSL библиотекой этот список шире). Следует отметить, что одно только присутствие алгоритма в стандартной библиотеке не гарантирует его криптографическую надежность. Так алгоритмы MD5, SHA-1 по состоянию на начало 2007 года не являются криптостойкими (см. соответствующие wiki страницы).
Для шифрования приходится использовать сторонние библиотеки, например pycrypto(соответствует Crypto API) или M2Crypto (не соответствует Crypto API). Достаточно полный список представлен в PyPI[13].

Сетевые протоколы

В стандартной библиотеке присутствуют модули для работы с сетевыми протоколами HTTP (и клиент, и простейший сервер), FTP, XML-RPC, SMTP, IMAP, NNTP и другие.

Простые базы данных

Python поддерживает доступ к файлам в DBM-формате: Unix (n)dbm (модуль dbm в Python 2.x или dbm.ndbm в Python 3), GNU DBM (модуль gdbm), модуль, написанный на чистом Python, dumbdbm[14].

Работа с объектом базы данных происходит аналогично работе со словарём Python (на примере dumbdbm)[15]:

>>> import  dumbdbm
>>> d = dumbdbm.open('my.db', 'w')  # открыть файл базы данных
>>> d['key'] = 'value'              # присвоить значение по ключу
>>> v = d['key']                    # получить значение по ключу
>>> d.sync()                        # записать изменения
>>> d.close()                       # закрыть базу данных

Для долговременного хранения объектов Python можно использовать модуль shelve (рус. полка).

Поддержка разработки программного обеспечения

Многопоточные вычисления

Модуль threading предоставляет класс Thread, соответствующий потоку, а также классы для объектов синхронизации, такие как: замки́ Lock и RLock, Timer, семафоры Semaphore и BoundedSemaphore, условная переменная Condition, событие Event. Кроме этого, для организации очередей — FIFO, LIFO, очередь с приоритетом — применяется модуль queue (Queue в Python 2).

В Python нет средств для завершения или приостановки потоков, а также для освобождения всех замко́в[16].

Наличие в основной реализации Python глобального блокировщика интерпретатора (англ. Global Interpreter Lock, GIL) сильно ограничивает полезность многопоточных вычислений в счётных задачах[17].

Графический интерфейс

Интроспекция

Платформно-зависимые модули

Примечания

Ссылки

Литература

  • David M. Beazley Python Essential Reference. — 4th Edition. — Addison-Wesley Professional, 2009. — 717 с. — ISBN 978-0672329784
  • Doug Hellmann. The Python Standard Library by Example. — Addison-Wesley Professional, 2011. — 1344 с. — ISBN 978-0321767349
  • Fredrik Lundh. Python Standard Library. — O'Reilly Media, 2001. — 281 с. — ISBN 978-0596000967
  • Tarek Ziadé. Expert Python Programming. — Packt Publishing Ltd., 2008. — 372 с. — ISBN 978-1-847194-94-7



Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Стандартная библиотека Python" в других словарях:

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

  • Стандартная библиотека языка Си — Стандартная библиотека языка программирования С assert.h complex.h ctype.h errno.h fenv.h float.h inttypes.h iso646.h limits.h locale.h math.h setjmp.h signal.h stdarg.h stdbool.h stddef.h …   Википедия

  • Python — У этого термина существуют и другие значения, см. Python (значения). Python Класс языка: му …   Википедия

  • Пайтон — Python Класс языка: функциональный, объектно ориентированный, императивный, аспектно ориентированный Тип исполнения: интерпретация байт кода, компиляция в MSIL, компиляция в байт код Java Появился в: 1990 г …   Википедия

  • Ruby — Класс языка: мультипарадигмальный: динамический, объектно ориентиров …   Википедия

  • C++ — У этого термина существуют и другие значения, см. C. См. также: Си (язык программирования) C++ Семантика: мультипарадигмальный: объектно ориентированное, обобщённое, процедурное, метапрограммирование Тип исполнения: компилируемый Появился в …   Википедия

  • Руби IDE — Ruby Семантика: мультипарадигмальный Тип исполнения: интерпретатор Появился в: 1995 г. Автор(ы): Юкихиро Мацумото Последняя версия: 1.9.1 …   Википедия

  • Рубин (язык программирования) — Ruby Семантика: мультипарадигмальный Тип исполнения: интерпретатор Появился в: 1995 г. Автор(ы): Юкихиро Мацумото Последняя версия: 1.9.1 …   Википедия

  • Язык программирования Рубин — Ruby Семантика: мультипарадигмальный Тип исполнения: интерпретатор Появился в: 1995 г. Автор(ы): Юкихиро Мацумото Последняя версия: 1.9.1 …   Википедия

  • Haskell — Класс языка: функциональный, ленивый, модульный Тип исполнения: компилируемый, интерпретируемый Появился в: 1990 …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»