Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Альтернативы
Недавние
Show all languages
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

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

Из Википедии — свободной энциклопедии

Богатая стандартная библиотека является одной из привлекательных сторон языка программирования 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 для определения новых абстрактных базовых классов (англ. abstract base class)[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 (рус. "поставить на полку").

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()

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

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

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

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

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

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

В стандартную поставку Python входит графическая библиотека Tkinter.

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

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

Модуль platform позволяет получать платформозависимую информацию о системе, такую как версию дистрибутива Linux или версию операционной системы.[19]

Примечания

Литература

  • 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.
  • Прохоренок Н. А. Python. Самое необходимое.. — БХВ-Петербург, 2011. — 416 с. — ISBN 978-5-9775-0614-4.

Ссылки

Эта страница в последний раз была отредактирована 23 октября 2021 в 19:38.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).