Стандартная библиотека Python
Ошибка скрипта: Модуля «Unsubst» не существует.
Богатая стандартная библиотека является одной из привлекательных сторон языка программирования Python. Здесь имеются средства для работы со многими сетевыми протоколами и форматами интернета, например, модули для написания HTTP-серверов и клиентов, для разбора и создания почтовых сообщений, для работы с XML и т. п. Набор модулей для работы с операционной системой позволяет писать кросс-платформенные приложения. Существуют модули для работы с регулярными выражениями, текстовыми кодировками, мультимедийными форматами, криптографическими протоколами, архивами, сериализации данных, поддержка юнит-тестирования и пр.
Сервисы периода исполнения[править]
Модуль sys[править]
В этом модуле содержатся функции и константы для взаимодействия с интерпретатором Python. В этом модуле, в том числе, содержатся следующие переменные:
argv
— аргументы командной строки,byteorder
— порядок байтов платформы,'little'
или'big'
,flags
— объект, предоставляющий в виде атрибутов информацию о флагах, данных интерпретатору. Например,sys.flags.debug
говорит о режиме отладки,copyright
— cтрока, содержащая авторские права, относящиеся к интерпретатору Python,platform
— идентификатор платформы, например, 'linux-i386',stdin
,stdout
,stderr
— стандартные потоки ввода, вывода и вывода ошибок,version
— строка с версией,exit
— выход из программы,getrecursionlimit
— возвращает лимит рекурсии,platform
— информация об операционной системе,ps1
,ps2
— первичное и вторичное приглашение интерпретатора (определены только если интерпретатор находится в интерактивном режиме). По умолчаниюps1 sys.ps1 == ">>> "
, аsys.ps2 == "... "
,api_version
— версия C API,version_info
— кортеж, содержащий пять компонентов номера версии,
и другие.
Модуль также содержит и другие сущности[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
для определения новых абстрактных базовых классов (англ. Шаблон:Langi)[4]. Абстрактный базовый класс понимается здесь в ином смысле, нежели в C++[5].
Типы данных[править]
Стандартная библиотека расширяет набор доступных Python типов данных[6]. Имеются отдельные типы данных для даты и времени, массива, кучи, очереди, слабые ссылки, а также так называемые абстрактные базовые типы из модуля collections.
Модуль datetime[править]
Модуль datetime предоставляет пять классов: дата (date
), время (time
), комбинация даты и времени (datetime
), разность дат и времени (timedelta
) и временная зона (tzinfo
)[7].
В следующем примере печатается экземпляр datetime
, фиксирующий дату и время в момент вызова метода now()
:
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2013, 5, 11, 19, 47, 25, 375511)
Модуль collections[править]
Данный модуль включает в себя набор специальных типов данных — контейнеров, которые дополняют стандартные встроенные типы dict
, list
, set
и tuple
. Например для Python 2.7: OrderedDict
— упорядоченный (в порядке добавления элементов) словарь, defaultdict
— словарь, вызывающий заданную функцию для отсутствующего в нём элемента, Counter
— словарь, который удобно использовать для подсчёта слов, Deque
— двусвязный список, namedtuple
— кортеж с возможностью доступа к элементам по именам атрибутов. Также имеются абстрактные базовые классы Container, Sequence, Set, Mapping
и другие[8][9].
Пример, демонстрирующий работу с дэком:
>>> 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
, который позволяет создавать вложенные словари[10].
Пример, в котором поиск значения по ключу ведётся в заданном порядке в нескольких словарях:
>>> 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'] = 10
>>> cm['a'], cm['b']
(4, 10)
Взаимодействие с ОС[править]
Модуль os[править]
Модуль предоставляет функции переносимого интерфейса к основным сервисам операционной системы, определяет некоторые переменные (например, environ для доступа к переменным окружения)[11].
Модуль 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
Обработка текстов[править]
Стандартная библиотека содержит несколько модулей для работы со строками и обработки текстов, включает в себя следующие возможности[12].
Полезные константы и функции из модуля string[править]
Модуль содержит различные константы, которые можно использовать при обработке текстов, например: ascii_letters (строка, содержащая все буквы из набора ASCII), ascii_lowercase, digits (строка с цифрами от 0 до 9), letters (буквы, зависят от установки локали) и т. п.
>>> from string import ascii_letters, ascii_lowercase, ascii_uppercase, digits
>>> ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> digits
'0123456789'
Сгенерировать пароль:
>>> chars = ascii_letters + digits
>>> from random import choice
>>> n = 8 # длина пароля
>>> ''.join(choice(chars) for _ in range(n))
'ia1KGm2t'
Для упрощения подстановки в строки по ключевым словам могут использоваться экземпляры класса 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
with open("some.csv", "wb") as csv_fh:
writer = csv.writer(csv_fh, 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
[13].
Примеры для 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] # some comment 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).
Использовать CryptoAPI-совместимые библиотеки достаточно просто:
>>> 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 года, не являются криптостойкими.
Для шифрования приходится использовать сторонние библиотеки, например, pycrypto (соответствует CryptoAPI) или M2Crypto (не соответствует CryptoAPI). Достаточно полный список представлен в PyPI[14].
Сетевые протоколы[править]
В стандартной библиотеке присутствуют модули для работы с сетевыми протоколами HTTP (и клиент, и простейший сервер), FTP, XML-RPC, SMTP, IMAP, NNTP и другие.
Получение файла через HTTP (HTTPS)[править]
Получение картинки с сайта:
from urllib import request
response = request.urlopen("https://ru.wikipedia.org/static/images/project-logos/ruwiki.png")
with open("ruwiki.png","wb") as file:
file.write(response.read())
Email[править]
Модуль smtplib[править]
Модуль предназначен для отправки сообщений электронной почты посредством протокола SMTP.
import smtplib
def send_email(text):
server = smtplib.SMTP("smtp.server", 587) # подключение к серверу
server.ehlo()
server.starttls()
server.login("login", "password") # логинимся на сервер
message = "\r\n".join([ # формируем сообщение Email с полями
"From: от кого",
"To: кому",
"Subject: тема",
"",
text,
])
server.sendmail("login@server", "адрес почты получателя", message) # отправляем
server.quit() # разлогиниваемся с сервера
send_email('Hello, World!')
Базы данных[править]
Простые базы данных[править]
Python поддерживает доступ к файлам в DBM-формате: Unix (n)dbm (модуль dbm
в Python 2.x или dbm.ndbm
в Python 3), GNU DBM (модуль gdbm
), модуль, написанный на чистом Python, dumbdbm
[15].
Работа с объектом базы данных происходит аналогично работе со словарём Python (на примере dumbdbm
)[16]:
>>> import dumbdbm
>>> d = dumbdbm.open('my.db', 'w') # открыть файл базы данных
>>> d['key'] = 'value' # присвоить значение по ключу
>>> v = d['key'] # получить значение по ключу
>>> d.sync() # записать изменения
>>> d.close() # закрыть базу данных
Для долговременного хранения объектов Python можно использовать модуль shelve
(рус. Шаблон:Langi).
SQLite[править]
SQLite — это встраиваемая кроссплатформенная БД, которая поддерживает достаточно полный набор команд SQL и доступна в исходных кодах (на языке C). Начиная с Python 2.5, библиотека sqlite3
поставляется вместе с интерпретатором языка Python.
Для работы с библиотекой нужно создать объект Connection
, который выступает в роли базы данных:
import sqlite3
conn = sqlite3.connect('example.db')
c = conn.cursor()
# Создаем таблицу
c.execute('''CREATE TABLE stocks
(date text, trans text, symbol text, qty real, price real)''')
# Вставляем строку
c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")
# Сохраняем (и записываем) изменения
conn.commit()
# После окончания работы мы можем закрыть соединение с БД
conn.close()
Поддержка разработки программного обеспечения[править]
Ошибка скрипта: Модуля «Unsubst» не существует.
Многопоточные вычисления[править]
Модуль threading
предоставляет класс Thread
, соответствующий потоку, а также классы для объектов синхронизации, такие как: блокировки Lock
и RLock
, Timer
, семафоры Semaphore
и BoundedSemaphore
, условная переменная Condition
, событие Event
. Кроме этого, для организации очередей — FIFO, LIFO, очередь с приоритетом — применяется модуль queue
(Queue
в Python 2).
В Python нет средств для завершения или приостановки потоков, а также для освобождения всех блокировок[17].
Наличие в основной реализации Python глобальной блокировки интерпретатора (англ. Шаблон:Langi, GIL) сильно ограничивает полезность многопоточных вычислений в счётных задачах[18]. Для параллельных вычислений требуется использовать специализированные библиотеки, модуль multiprocessing
или реализации Python без GIL.
Графический интерфейс[править]
В стандартную поставку Python входит графическая библиотека Tkinter.
Интроспекция[править]
Ошибка скрипта: Модуля «Основная статья» не существует.
Платформно-зависимые модули[править]
Ошибка скрипта: Модуля «Unsubst» не существует.
Модуль platform
позволяет получать платформозависимую информацию о системе, такую как версию дистрибутива Linux или версию операционной системы.[19]
Примечания[править]
- ↑ Шаблон:Sfn-текст.
- ↑ Шаблон:Sfn-текст.
- ↑ Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
- ↑ Шаблон:Sfn-текст.
- ↑ Python v2.7 documentation, The Python Standard Library, Python Runtime Services, Abstract Base Classes
- ↑ Data Types — Python 3 documentation
- ↑ Шаблон:Sfn-текст.
- ↑ Шаблон:Sfn-текст.
- ↑ Шаблон:Sfn-текст.
- ↑ Python 3.3 Documentation, The Python Standard Library, Data Types
- ↑ Шаблон:Sfn-текст.
- ↑ Шаблон:Sfn-текст.
- ↑ Шаблон:Sfn-текст.
- ↑ Криптографические модули в каталоге PyPI
- ↑ Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
- ↑ Шаблон:Sfn-текст.
- ↑ Шаблон:Sfn-текст.
- ↑ Шаблон:Sfn-текст.
- ↑ Python v2.7 Documentation, platform — Access to underlying platform’s identifying data
Литература[править]
- Страница Модуль:Citation/CS1/styles.css не имеет содержания.Шаблон:±. Python Essential Reference. — 4th Edition. — Addison-Wesley Professional, 2009. — 717 с. — ISBN 978-0672329784.
- Страница Модуль:Citation/CS1/styles.css не имеет содержания.Шаблон:±. The Python Standard Library by Example. — Addison-Wesley Professional, 2011. — 1344 с. — ISBN 978-0321767349.
- Страница Модуль:Citation/CS1/styles.css не имеет содержания.Шаблон:±. Python Standard Library. — O'Reilly Media, 2001. — 281 с. — ISBN 978-0596000967.
- Страница Модуль:Citation/CS1/styles.css не имеет содержания.Шаблон:±. Expert Python Programming. — Packt Publishing Ltd., 2008. — 372 с. — ISBN 978-1-847194-94-7.
- Страница Модуль:Citation/CS1/styles.css не имеет содержания.Шаблон:±. Python. Самое необходимое.. — БХВ-Петербург, 2011. — 416 с. — ISBN 978-5-9775-0614-4.
Ссылки[править]
- Официальная документация по стандартной библиотеке модулей Python 2
- Официальная документация по стандартной библиотеке модулей Python 3
This article "Стандартная библиотека Python" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:Стандартная библиотека Python. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.