stdlib.md
1> **Источник:** https://python-all.ru/3.15/tutorial/stdlib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 10. Краткий обзор стандартной библиотеки89## 10.1. Интерфейс операционной системы1011Модуль [`os`](https://python-all.ru/3.15/library/os.html#module-os) предоставляет десятки функций для взаимодействия с операционной системой:1213```python14>>> import os15>>> os.getcwd() # Возвращает текущую рабочую директорию16'C:\\Python315'17>>> os.chdir('/server/accesslogs') # Изменяет текущую рабочую директорию18>>> os.system('mkdir today') # Выполняет команду mkdir в системной оболочке19020```2122Обязательно используйте стиль `import os` вместо `from os import *`. Это не позволит [`os.open()`](https://python-all.ru/3.15/library/os.html#os.open) затенять встроенную функцию [`open()`](https://python-all.ru/3.15/library/functions.html#open), которая работает совсем иначе.2324Встроенные функции [`dir()`](https://python-all.ru/3.15/library/functions.html#dir) и [`help()`](https://python-all.ru/3.15/library/functions.html#help) полезны в качестве интерактивных средств для работы с большими модулями, такими как [`os`](https://python-all.ru/3.15/library/os.html#module-os):2526```python27>>> import os28>>> dir(os)29<returns a list of all module functions>30>>> help(os)31<returns an extensive manual page created from the module's docstrings>32```3334Для повседневных задач управления файлами и каталогами модуль [`shutil`](https://python-all.ru/3.15/library/shutil.html#module-shutil) предоставляет интерфейс более высокого уровня, который проще в использовании:3536```python37>>> import shutil38>>> shutil.copyfile('data.db', 'archive.db')39'archive.db'40>>> shutil.move('/build/executables', 'installdir')41'installdir'42```4344## 10.2. Шаблоны имён файлов4546Модуль [`glob`](https://python-all.ru/3.15/library/glob.html#module-glob) предоставляет функцию для составления списков файлов по поиску с шаблонами каталогов:4748```python49>>> import glob50>>> glob.glob('*.py')51['primes.py', 'random.py', 'quote.py']52```5354## 10.3. Аргументы командной строки5556Обычные служебные сценарии часто должны обрабатывать аргументы командной строки. Эти аргументы хранятся в атрибуте *argv* модуля [`sys`](https://python-all.ru/3.15/library/sys.html#module-sys) в виде списка. Для примера возьмём следующий файл `demo.py`:5758```python59# Файл demo.py60import sys61print(sys.argv)62```6364Вот вывод при запуске `python demo.py one two three` в командной строке:6566```python67['demo.py', 'one', 'two', 'three']68```6970Модуль [`argparse`](https://python-all.ru/3.15/library/argparse.html#module-argparse) предоставляет более сложный механизм для обработки аргументов командной строки. Следующий сценарий извлекает одно или несколько имён файлов и необязательное количество строк для отображения:7172```python73import argparse7475parser = argparse.ArgumentParser(76 prog='top',77 description='Show top lines from each file')78parser.add_argument('filenames', nargs='+')79parser.add_argument('-l', '--lines', type=int, default=10)80args = parser.parse_args()81print(args)82```8384При запуске в командной строке с `python top.py --lines=5 alpha.txt beta.txt` сценарий устанавливает `args.lines` в `5` и `args.filenames` в `['alpha.txt', 'beta.txt']`.8586## 10.4. Перенаправление вывода ошибок и завершение программы8788Модуль [`sys`](https://python-all.ru/3.15/library/sys.html#module-sys) также имеет атрибуты для *stdin*, *stdout* и *stderr*. Последний полезен для вывода предупреждений и сообщений об ошибках, чтобы они были видны, даже если *stdout* был перенаправлен:8990```python91>>> sys.stderr.write('Warning, log file not found starting a new one\n')92Warning, log file not found starting a new one93```9495Самый прямой способ завершить сценарий – использовать `sys.exit()`.9697## 10.5. Сопоставление строковых шаблонов9899Модуль [`re`](https://python-all.ru/3.15/library/re.html#module-re) предоставляет инструменты регулярных выражений для продвинутой обработки строк. Для сложного сопоставления и манипуляций регулярные выражения предлагают краткие, оптимизированные решения:100101```python102>>> import re103>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')104['foot', 'fell', 'fastest']105>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')106'cat in the hat'107```108109Когда нужны только простые возможности, предпочтительнее строковые методы, поскольку их легче читать и отлаживать:110111```python112>>> 'tea for too'.replace('too', 'two')113'tea for two'114```115116## 10.6. Математика117118Модуль [`math`](https://python-all.ru/3.15/library/math.html#module-math) предоставляет доступ к низкоуровневым функциям библиотеки C для вещественной арифметики:119120```python121>>> import math122>>> math.cos(math.pi / 4)1230.70710678118654757124>>> math.log(1024, 2)12510.0126```127128Модуль [`random`](https://python-all.ru/3.15/library/random.html#module-random) предоставляет инструменты для случайного выбора:129130```python131>>> import random132>>> random.choice(['apple', 'pear', 'banana'])133'apple'134>>> random.sample(range(100), 10) # выборка без возвращения135[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]136>>> random.random() # случайное число с плавающей точкой из интервала [0.0, 1.0)1370.17970987693706186138>>> random.randrange(6) # случайное целое число из range(6)1394140```141142Модуль [`statistics`](https://python-all.ru/3.15/library/statistics.html#module-statistics) вычисляет основные статистические свойства (среднее, медиану, дисперсию и т. д.) числовых данных:143144```python145>>> import statistics146>>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]147>>> statistics.mean(data)1481.6071428571428572149>>> statistics.median(data)1501.25151>>> statistics.variance(data)1521.3720238095238095153```154155Проект SciPy \<[https://scipy.org](https://python-all.ru/3.15/tutorial/stdlib.html)\> содержит множество других модулей для численных расчётов.156157## 10.7. Доступ в Интернет158159Существует ряд модулей для доступа в Интернет и обработки интернет-протоколов. Два самых простых – [`urllib.request`](https://python-all.ru/3.15/library/urllib.request.html#module-urllib.request) для получения данных по URL и [`smtplib`](https://python-all.ru/3.15/library/smtplib.html#module-smtplib) для отправки почты:160161```python162>>> from urllib.request import urlopen163>>> with urlopen('https://docs.python.org/3/') as response:164... for line in response:165... line = line.decode() # Преобразует байты в строку166... if 'updated' in line:167... print(line.rstrip()) # Удаляет завершающий символ новой строки168...169 Last updated on Nov 11, 2025 (20:11 UTC).170171>>> import smtplib172>>> server = smtplib.SMTP('localhost')173>>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',174... """Кому: jcaesar@example.org175... От: soothsayer@example.org176...177... Остерегайтесь мартовских ид.178... """)179>>> server.quit()180```181182(Обратите внимание, что второй пример требует работающего почтового сервера на localhost.)183184## 10.8. Даты и время185186Модуль [`datetime`](https://python-all.ru/3.15/library/datetime.html#module-datetime) предоставляет классы для работы с датами и временем как в простых, так и в сложных сценариях. Хотя арифметика дат и времени поддерживается, основное внимание в реализации уделяется эффективному извлечению членов для форматирования вывода и манипуляций. Модуль также поддерживает объекты, учитывающие часовой пояс.187188```python189>>> # даты легко создаются и форматируются190>>> import datetime as dt191>>> now = dt.date.today()192>>> now193datetime.date(2003, 12, 2)194>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")195'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'196197>>> # даты поддерживают календарные вычисления198>>> birthday = dt.date(1964, 7, 31)199>>> age = now - birthday200>>> age.days20114368202```203204## 10.9. Сжатие данных205206Распространённые форматы архивирования и сжатия данных напрямую поддерживаются модулями: [`zlib`](https://python-all.ru/3.15/library/zlib.html#module-zlib), [`gzip`](https://python-all.ru/3.15/library/gzip.html#module-gzip), [`bz2`](https://python-all.ru/3.15/library/bz2.html#module-bz2), [`lzma`](https://python-all.ru/3.15/library/lzma.html#module-lzma), [`zipfile`](https://python-all.ru/3.15/library/zipfile.html#module-zipfile) и [`tarfile`](https://python-all.ru/3.15/library/tarfile.html#module-tarfile).207208```python209>>> import zlib210>>> s = b'witch which has which witches wrist watch'211>>> len(s)21241213>>> t = zlib.compress(s)214>>> len(t)21537216>>> zlib.decompress(t)217b'witch which has which witches wrist watch'218>>> zlib.crc32(s)219226805979220```221222## 10.10. Измерение производительности223224Некоторые пользователи Python проявляют глубокий интерес к сравнению производительности различных подходов к одной и той же задаче. Python предоставляет инструмент измерения, который сразу даёт ответы на эти вопросы.225226Например, может возникнуть соблазн использовать упаковку и распаковку кортежей вместо традиционного способа обмена аргументами. Модуль [`timeit`](https://python-all.ru/3.15/library/timeit.html#module-timeit) быстро демонстрирует небольшое преимущество в производительности:227228```python229>>> from timeit import Timer230>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()2310.57535828626024577232>>> Timer('a,b = b,a', 'a=1; b=2').timeit()2330.54962537085770791234```235236В отличие от высокой детализации [`timeit`](https://python-all.ru/3.15/library/timeit.html#module-timeit), модули [`profile`](https://python-all.ru/3.15/library/profile.html#module-profile) и [`pstats`](https://python-all.ru/3.15/library/pstats.html#module-pstats) предоставляют инструменты для выявления критичных по времени участков в более крупных блоках кода.237238## 10.11. Контроль качества239240Один из подходов к разработке качественного программного обеспечения – писать тесты для каждой функции по мере её создания и регулярно запускать их в процессе разработки.241242Модуль [`doctest`](https://python-all.ru/3.15/library/doctest.html#module-doctest) предоставляет инструмент для сканирования модуля и проверки тестов, встроенных в строки документации программы. Создание тестов сводится к копированию типичного вызова вместе с результатами в docstring. Это улучшает документацию, предоставляя пользователю пример, а также позволяет модулю doctest гарантировать, что код соответствует документации:243244```python245def average(values):246 """Вычисляет среднее арифметическое списка чисел.247248 >>> print(average([20, 30, 70]))249 40.0250 """251 return sum(values) / len(values)252253import doctest254doctest.testmod() # Автоматически проверяет встроенные тесты255```256257Модуль [`unittest`](https://python-all.ru/3.15/library/unittest.html#module-unittest) не так прост в использовании, как [`doctest`](https://python-all.ru/3.15/library/doctest.html#module-doctest), но позволяет поддерживать более полный набор тестов в отдельном файле:258259```python260import unittest261262class TestStatisticalFunctions(unittest.TestCase):263264 def test_average(self):265 self.assertEqual(average([20, 30, 70]), 40.0)266 self.assertEqual(round(average([1, 5, 7]), 1), 4.3)267 with self.assertRaises(ZeroDivisionError):268 average([])269 with self.assertRaises(TypeError):270 average(20, 30, 70)271272unittest.main() # Вызов из командной строки запускает все тесты273```274275## 10.12. Батарейки в комплекте276277Python придерживается философии «батарейки в комплекте». Это лучше всего видно на примере сложных и мощных возможностей его крупных пакетов. Например:278279- Модули [`xmlrpc.client`](https://python-all.ru/3.15/library/xmlrpc.client.html#module-xmlrpc.client) и [`xmlrpc.server`](https://python-all.ru/3.15/library/xmlrpc.server.html#module-xmlrpc.server) превращают реализацию удалённых вызовов процедур в почти тривиальную задачу. Несмотря на названия модулей, не требуется непосредственного знания или работы с XML.280- Пакет [`email`](https://python-all.ru/3.15/library/email.html#module-email) – это библиотека для управления сообщениями электронной почты, включая MIME и другие документы сообщений на основе [**RFC 5322**](https://python-all.ru/3.15/tutorial/stdlib.html). В отличие от [`smtplib`](https://python-all.ru/3.15/library/smtplib.html#module-smtplib) и [`poplib`](https://python-all.ru/3.15/library/poplib.html#module-poplib), которые фактически отправляют и получают сообщения, пакет email содержит полный набор инструментов для создания или декодирования сложных структур сообщений (включая вложения) и для реализации интернет-кодирования и протоколов заголовков.281- Пакет [`json`](https://python-all.ru/3.15/library/json.html#module-json) обеспечивает надёжную поддержку разбора этого популярного формата обмена данными. Модуль [`csv`](https://python-all.ru/3.15/library/csv.html#module-csv) поддерживает прямое чтение и запись файлов в формате CSV (значения, разделённые запятыми), который часто используется базами данных и электронными таблицами. Обработка XML поддерживается пакетами [`xml.etree.ElementTree`](https://python-all.ru/3.15/library/xml.etree.elementtree.html#module-xml.etree.ElementTree), [`xml.dom`](https://python-all.ru/3.15/library/xml.dom.html#module-xml.dom) и [`xml.sax`](https://python-all.ru/3.15/library/xml.sax.html#module-xml.sax). Вместе эти модули и пакеты значительно упрощают обмен данными между приложениями Python и другими инструментами.282- Модуль [`sqlite3`](https://python-all.ru/3.15/library/sqlite3.html#module-sqlite3) является обёрткой для библиотеки баз данных SQLite, предоставляя постоянную базу данных, которую можно обновлять и к которой можно обращаться с помощью слегка нестандартного синтаксиса SQL.283- Интернационализация поддерживается рядом модулей, включая [`gettext`](https://python-all.ru/3.15/library/gettext.html#module-gettext), [`locale`](https://python-all.ru/3.15/library/locale.html#module-locale) и пакет [`codecs`](https://python-all.ru/3.15/library/codecs.html#module-codecs).284