10. Краткий обзор стандартной библиотеки – документация Python 3.14
Документация Python неофициальный перевод
Содержание страницы

10. Краткий обзор стандартной библиотекиBrief tour of the standard library

10.1. Интерфейс операционной системыOperating system interface

Модуль os предоставляет десятки функций для взаимодействия с операционной системой:

>>> import os
>>> os.getcwd()      # Возвращает текущую рабочую директорию
'C:\\Python314'
>>> os.chdir('/server/accesslogs')   # Изменяет текущую рабочую директорию
>>> os.system('mkdir today')   # Выполняет команду mkdir в системной оболочке
0

Обязательно используйте стиль import os вместо from os import *. Это не позволит os.open() затенять встроенную функцию open(), которая работает совсем иначе.

Встроенные функции dir() и help() полезны в качестве интерактивных средств для работы с большими модулями, такими как os:

>>> import os
>>> dir(os)
<returns a list of all module functions>
>>> help(os)
<returns an extensive manual page created from the module's docstrings>

Для повседневных задач управления файлами и каталогами модуль shutil предоставляет интерфейс более высокого уровня, который проще в использовании:

>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
'archive.db'
>>> shutil.move('/build/executables', 'installdir')
'installdir'

10.2. Шаблоны имён файловFile wildcards

Модуль glob предоставляет функцию для составления списков файлов по поиску с шаблонами каталогов:

>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']

10.3. Аргументы командной строкиCommand-line arguments

Обычные служебные сценарии часто должны обрабатывать аргументы командной строки. Эти аргументы хранятся в атрибуте argv модуля sys в виде списка. Для примера возьмём следующий файл demo.py:

# Файл demo.py
import sys
print(sys.argv)

Вот вывод при запуске python demo.py one two three в командной строке:

['demo.py', 'one', 'two', 'three']

Модуль argparse предоставляет более сложный механизм для обработки аргументов командной строки. Следующий сценарий извлекает одно или несколько имён файлов и необязательное количество строк для отображения:

import argparse

parser = argparse.ArgumentParser(
    prog='top',
    description='Show top lines from each file')
parser.add_argument('filenames', nargs='+')
parser.add_argument('-l', '--lines', type=int, default=10)
args = parser.parse_args()
print(args)

При запуске в командной строке с python top.py --lines=5 alpha.txt beta.txt сценарий устанавливает args.lines в 5 и args.filenames в ['alpha.txt', 'beta.txt'].

10.4. Перенаправление вывода ошибок и завершение программыError output redirection and program termination

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

>>> sys.stderr.write('Warning, log file not found starting a new one\n')
Warning, log file not found starting a new one

Самый прямой способ завершить сценарий – использовать sys.exit().

10.5. Сопоставление строковых шаблоновString pattern matching

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

>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'

Когда нужны только простые возможности, предпочтительнее строковые методы, поскольку их легче читать и отлаживать:

>>> 'tea for too'.replace('too', 'two')
'tea for two'

10.6. МатематикаMathematics

Модуль math предоставляет доступ к низкоуровневым функциям библиотеки C для вещественной арифметики:

>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0

Модуль random предоставляет инструменты для случайного выбора:

>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10)   # выборка без возвращения
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random()    # случайное число с плавающей точкой из интервала [0.0, 1.0)
0.17970987693706186
>>> random.randrange(6)    # случайное целое число из range(6)
4

Модуль statistics вычисляет основные статистические свойства (среднее, медиану, дисперсию и т. д.) числовых данных:

>>> import statistics
>>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
>>> statistics.mean(data)
1.6071428571428572
>>> statistics.median(data)
1.25
>>> statistics.variance(data)
1.3720238095238095

Проект SciPy <https://scipy.org> содержит множество других модулей для численных расчётов.

10.7. Доступ в ИнтернетInternet access

Существует ряд модулей для доступа в Интернет и обработки интернет-протоколов. Два самых простых – urllib.request для получения данных по URL и smtplib для отправки почты:

>>> from urllib.request import urlopen
>>> with urlopen('https://docs.python.org/3/') as response:
...     for line in response:
...         line = line.decode()             # Преобразует байты в строку
...         if 'updated' in line:
...             print(line.rstrip())         # Удаляет завершающий символ новой строки
...
      Last updated on Nov 11, 2025 (20:11 UTC).

>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
... """Кому: jcaesar@example.org
... От: soothsayer@example.org
...
... Остерегайтесь мартовских ид.
... """)
>>> server.quit()

(Обратите внимание, что второй пример требует работающего почтового сервера на localhost.)

10.8. Даты и времяDates and times

Модуль datetime предоставляет классы для работы с датами и временем как в простых, так и в сложных сценариях. Хотя арифметика дат и времени поддерживается, основное внимание в реализации уделяется эффективному извлечению членов для форматирования вывода и манипуляций. Модуль также поддерживает объекты, учитывающие часовой пояс.

>>> # даты легко создаются и форматируются
>>> import datetime as dt
>>> now = dt.date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'

>>> # даты поддерживают календарные вычисления
>>> birthday = dt.date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368

10.9. Сжатие данныхData compression

Распространённые форматы архивирования и сжатия данных напрямую поддерживаются модулями: zlib, gzip, bz2, lzma, zipfile и tarfile.

>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
>>> zlib.crc32(s)
226805979

10.10. Измерение производительностиPerformance measurement

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

Например, может возникнуть соблазн использовать упаковку и распаковку кортежей вместо традиционного способа обмена аргументами. Модуль timeit быстро демонстрирует небольшое преимущество в производительности:

>>> from timeit import Timer
>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
0.57535828626024577
>>> Timer('a,b = b,a', 'a=1; b=2').timeit()
0.54962537085770791

В отличие от высокой детализации timeit, модули profile и pstats предоставляют инструменты для выявления критичных по времени участков в более крупных блоках кода.

10.11. Контроль качестваQuality control

Один из подходов к разработке качественного программного обеспечения – писать тесты для каждой функции по мере её создания и регулярно запускать их в процессе разработки.

Модуль doctest предоставляет инструмент для сканирования модуля и проверки тестов, встроенных в строки документации программы. Создание тестов сводится к копированию типичного вызова вместе с результатами в docstring. Это улучшает документацию, предоставляя пользователю пример, а также позволяет модулю doctest гарантировать, что код соответствует документации:

def average(values):
    """Вычисляет среднее арифметическое списка чисел.

    >>> print(average([20, 30, 70]))
    40.0
    """
    return sum(values) / len(values)

import doctest
doctest.testmod()   # Автоматически проверяет встроенные тесты

Модуль unittest не так прост в использовании, как doctest, но позволяет поддерживать более полный набор тестов в отдельном файле:

import unittest

class TestStatisticalFunctions(unittest.TestCase):

    def test_average(self):
        self.assertEqual(average([20, 30, 70]), 40.0)
        self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
        with self.assertRaises(ZeroDivisionError):
            average([])
        with self.assertRaises(TypeError):
            average(20, 30, 70)

unittest.main()  # Вызов из командной строки запускает все тесты

10.12. Батарейки в комплектеBatteries included

Python придерживается философии «батарейки в комплекте». Это лучше всего видно на примере сложных и мощных возможностей его крупных пакетов. Например:

  • Модули xmlrpc.client и xmlrpc.server превращают реализацию удалённых вызовов процедур в почти тривиальную задачу. Несмотря на названия модулей, не требуется непосредственного знания или работы с XML.

  • Пакет email – это библиотека для управления сообщениями электронной почты, включая MIME и другие документы сообщений на основе RFC 5322. В отличие от smtplib и poplib, которые фактически отправляют и получают сообщения, пакет email содержит полный набор инструментов для создания или декодирования сложных структур сообщений (включая вложения) и для реализации интернет-кодирования и протоколов заголовков.

  • Пакет json обеспечивает надёжную поддержку разбора этого популярного формата обмена данными. Модуль csv поддерживает прямое чтение и запись файлов в формате CSV (значения, разделённые запятыми), который часто используется базами данных и электронными таблицами. Обработка XML поддерживается пакетами xml.etree.ElementTree, xml.dom и xml.sax. Вместе эти модули и пакеты значительно упрощают обмен данными между приложениями Python и другими инструментами.

  • Модуль sqlite3 является обёрткой для библиотеки баз данных SQLite, предоставляя постоянную базу данных, которую можно обновлять и к которой можно обращаться с помощью слегка нестандартного синтаксиса SQL.

  • Интернационализация поддерживается рядом модулей, включая gettext, locale и пакет codecs.