Документация Python неофициальный перевод

stdlib.md

247 строк · 16.8 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.3/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.3/library/os.html#module-os) предоставляет десятки функций для взаимодействия с операционной системой:1213```python14>>> import os15>>> os.getcwd()      # Возвращает текущую рабочую директорию16'C:\\Python33'17>>> os.chdir('/server/accesslogs')   # Изменяет текущую рабочую директорию18>>> os.system('mkdir today')   # Выполняет команду mkdir в системной оболочке19020```2122Используйте стиль `import os` вместо `from os import *`. Это предотвратит затенение встроенной функции [`open()`](https://python-all.ru/3.3/library/functions.html#open) со стороны [`os.open()`](https://python-all.ru/3.3/library/os.html#os.open), которая работает совсем иначе.2324Встроенные функции [`dir()`](https://python-all.ru/3.3/library/functions.html#dir) и [`help()`](https://python-all.ru/3.3/library/functions.html#help) полезны в качестве интерактивных помощников при работе с крупными модулями, такими как [`os`](https://python-all.ru/3.3/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.3/library/shutil.html#module-shutil) предоставляет интерфейс более высокого уровня, который проще в использовании:3536```python37>>> import shutil38>>> shutil.copyfile('data.db', 'archive.db')39>>> shutil.move('/build/executables', 'installdir')40```4142## 10.2. Подстановочные знаки для файлов4344Модуль [`glob`](https://python-all.ru/3.3/library/glob.html#module-glob) предоставляет функцию для составления списков файлов по шаблонным поискам в каталогах:4546```python47>>> import glob48>>> glob.glob('*.py')49['primes.py', 'random.py', 'quote.py']50```5152## 10.3. Аргументы командной строки5354Обычные вспомогательные скрипты часто должны обрабатывать аргументы командной строки. Эти аргументы хранятся в виде списка в атрибуте *argv* модуля [`sys`](https://python-all.ru/3.3/library/sys.html#module-sys). Например, следующий вывод получается при запуске `python demo.py one two three` в командной строке:5556```python57>>> import sys58>>> print(sys.argv)59['demo.py', 'one', 'two', 'three']60```6162Модуль [`getopt`](https://python-all.ru/3.3/library/getopt.html#module-getopt) обрабатывает *sys.argv* в соответствии с соглашениями функции [`getopt()`](https://python-all.ru/3.3/library/getopt.html#module-getopt) из Unix. Более мощная и гибкая обработка командной строки предоставляется модулем [`argparse`](https://python-all.ru/3.3/library/argparse.html#module-argparse).6364## 10.4. Перенаправление вывода ошибок и завершение программы6566Модуль [`sys`](https://python-all.ru/3.3/library/sys.html#module-sys) также имеет атрибуты для *stdin*, *stdout* и *stderr*. Последний полезен для вывода предупреждений и сообщений об ошибках, чтобы они были видны, даже если *stdout* перенаправлен:6768```python69>>> sys.stderr.write('Warning, log file not found starting a new one\n')70Warning, log file not found starting a new one71```7273Самый прямой способ завершить скрипт – использовать `sys.exit()`.7475## 10.5. Сопоставление строк по шаблону7677Модуль [`re`](https://python-all.ru/3.3/library/re.html#module-re) предоставляет инструменты регулярных выражений для продвинутой обработки строк. Для сложных сопоставлений и манипуляций регулярные выражения предлагают краткие и оптимизированные решения:7879```python80>>> import re81>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')82['foot', 'fell', 'fastest']83>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')84'cat in the hat'85```8687Когда нужны только простые возможности, предпочтительнее строковые методы, поскольку их легче читать и отлаживать:8889```python90>>> 'tea for too'.replace('too', 'two')91'tea for two'92```9394## 10.6. Математика9596Модуль [`math`](https://python-all.ru/3.3/library/math.html#module-math) предоставляет доступ к низкоуровневым функциям библиотеки C для математики с плавающей запятой:9798```python99>>> import math100>>> math.cos(math.pi / 4)1010.70710678118654757102>>> math.log(1024, 2)10310.0104```105106Модуль [`random`](https://python-all.ru/3.3/library/random.html#module-random) предоставляет инструменты для создания случайных выборок:107108```python109>>> import random110>>> random.choice(['apple', 'pear', 'banana'])111'apple'112>>> random.sample(range(100), 10)   # выборка без возвращения113[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]114>>> random.random()    # случайное число с плавающей запятой1150.17970987693706186116>>> random.randrange(6)    # случайное целое число из range(6)1174118```119120Проект SciPy \<[http://scipy.org](https://python-all.ru/3.3/tutorial/stdlib.html)\> содержит много других модулей для численных вычислений.121122## 10.7. Доступ к Интернету123124Существует ряд модулей для доступа к интернету и обработки интернет-протоколов. Два самых простых – [`urllib.request`](https://python-all.ru/3.3/library/urllib.request.html#module-urllib.request) для получения данных по URL и [`smtplib`](https://python-all.ru/3.3/library/smtplib.html#module-smtplib) для отправки почты:125126```python127>>> from urllib.request import urlopen128>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):129...     line = line.decode('utf-8')  # Декодирование двоичных данных в текст.130...     if 'EST' in line or 'EDT' in line:  # поиск восточного времени131...         print(line)132133<BR>Nov. 25, 09:43:32 PM EST134135>>> import smtplib136>>> server = smtplib.SMTP('localhost')137>>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',138... """Кому: jcaesar@example.org139... От: soothsayer@example.org140...141... Остерегайтесь мартовских ид.142... """)143>>> server.quit()144```145146(Обратите внимание, что второй пример требует работающего почтового сервера на localhost.)147148## 10.8. Даты и время149150Модуль [`datetime`](https://python-all.ru/3.3/library/datetime.html#module-datetime) предоставляет классы для работы с датами и временем как простыми, так и сложными способами. Хотя арифметика дат и времени поддерживается, основное внимание в реализации уделяется эффективному извлечению элементов для форматирования вывода и манипуляций. Модуль также поддерживает объекты, учитывающие часовой пояс.151152```python153>>> # даты легко создаются и форматируются154>>> from datetime import date155>>> now = date.today()156>>> now157datetime.date(2003, 12, 2)158>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")159'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'160161>>> # даты поддерживают календарные вычисления162>>> birthday = date(1964, 7, 31)163>>> age = now - birthday164>>> age.days16514368166```167168## 10.9. Сжатие данных169170Распространённые форматы архивирования и сжатия данных напрямую поддерживаются модулями, включая: [`zlib`](https://python-all.ru/3.3/library/zlib.html#module-zlib), [`gzip`](https://python-all.ru/3.3/library/gzip.html#module-gzip), [`bz2`](https://python-all.ru/3.3/library/bz2.html#module-bz2), [`lzma`](https://python-all.ru/3.3/library/lzma.html#module-lzma), [`zipfile`](https://python-all.ru/3.3/library/zipfile.html#module-zipfile) и [`tarfile`](https://python-all.ru/3.3/library/tarfile.html#module-tarfile).171172```python173>>> import zlib174>>> s = b'witch which has which witches wrist watch'175>>> len(s)17641177>>> t = zlib.compress(s)178>>> len(t)17937180>>> zlib.decompress(t)181b'witch which has which witches wrist watch'182>>> zlib.crc32(s)183226805979184```185186## 10.10. Измерение производительности187188Некоторые пользователи Python проявляют глубокий интерес к сравнению производительности различных подходов к одной и той же задаче. Python предоставляет инструмент измерения, который сразу даёт ответы на эти вопросы.189190Например, может возникнуть соблазн использовать распаковку кортежей вместо традиционного подхода для обмена аргументами. Модуль [`timeit`](https://python-all.ru/3.3/library/timeit.html#module-timeit) быстро демонстрирует скромное преимущество в производительности:191192```python193>>> from timeit import Timer194>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()1950.57535828626024577196>>> Timer('a,b = b,a', 'a=1; b=2').timeit()1970.54962537085770791198```199200В отличие от тонкой детализации [`timeit`](https://python-all.ru/3.3/library/timeit.html#module-timeit), модули [`profile`](https://python-all.ru/3.3/library/profile.html#module-profile) и [`pstats`](https://python-all.ru/3.3/library/profile.html#module-pstats) предоставляют инструменты для выявления критичных по времени участков в более крупных блоках кода.201202## 10.11. Контроль качества203204Один из подходов к разработке качественного программного обеспечения – писать тесты для каждой функции по мере её создания и регулярно запускать их в процессе разработки.205206Модуль [`doctest`](https://python-all.ru/3.3/library/doctest.html#module-doctest) предоставляет инструмент для сканирования модуля и проверки тестов, встроенных в строки документации программы. Создание теста так же просто, как копирование и вставка типичного вызова вместе с его результатами в строку документации. Это улучшает документацию, предоставляя пользователю пример, и позволяет модулю doctest убедиться, что код соответствует документации:207208```python209def average(values):210    """Вычисляет среднее арифметическое списка чисел.211212    >>> print(average([20, 30, 70]))213    40.0214    """215    return sum(values) / len(values)216217import doctest218doctest.testmod()   # Автоматически проверяет встроенные тесты219```220221Модуль [`unittest`](https://python-all.ru/3.3/library/unittest.html#module-unittest) не так прост, как модуль [`doctest`](https://python-all.ru/3.3/library/doctest.html#module-doctest), но позволяет поддерживать более полный набор тестов в отдельном файле:222223```python224import unittest225226class TestStatisticalFunctions(unittest.TestCase):227228    def test_average(self):229        self.assertEqual(average([20, 30, 70]), 40.0)230        self.assertEqual(round(average([1, 5, 7]), 1), 4.3)231        with self.assertRaises(ZeroDivisionError):232            average([])233        with self.assertRaises(TypeError):234            average(20, 30, 70)235236unittest.main() # Вызов из командной строки запускает все тесты237```238239## 10.12. Батарейки в комплекте240241Python придерживается философии «батарейки в комплекте». Это лучше всего видно на примере сложных и мощных возможностей его крупных пакетов. Например:242243- Модули [`xmlrpc.client`](https://python-all.ru/3.3/library/xmlrpc.client.html#module-xmlrpc.client) и [`xmlrpc.server`](https://python-all.ru/3.3/library/xmlrpc.server.html#module-xmlrpc.server) превращают реализацию удалённых вызовов процедур в почти тривиальную задачу. Несмотря на названия модулей, никаких знаний XML или работы с ним не требуется.244- Пакет [`email`](https://python-all.ru/3.3/library/email.html#module-email) – это библиотека для управления почтовыми сообщениями, включая MIME и другие документы на основе RFC 2822. В отличие от [`smtplib`](https://python-all.ru/3.3/library/smtplib.html#module-smtplib) и [`poplib`](https://python-all.ru/3.3/library/poplib.html#module-poplib), которые непосредственно отправляют и принимают сообщения, пакет email предоставляет полный набор инструментов для построения или декодирования сложных структур сообщений (включая вложения), а также для реализации интернет-кодировок и заголовочных протоколов.245- Пакеты [`xml.dom`](https://python-all.ru/3.3/library/xml.dom.html#module-xml.dom) и [`xml.sax`](https://python-all.ru/3.3/library/xml.sax.html#module-xml.sax) предоставляют надежную поддержку для разбора этого популярного формата обмена данными. Аналогично, модуль [`csv`](https://python-all.ru/3.3/library/csv.html#module-csv) поддерживает прямые чтение и запись в распространенном формате баз данных. Вместе эти модули и пакеты значительно упрощают обмен данными между приложениями Python и другими инструментами.246- Интернационализация поддерживается несколькими модулями, включая [`gettext`](https://python-all.ru/3.3/library/gettext.html#module-gettext), [`locale`](https://python-all.ru/3.3/library/locale.html#module-locale) и пакет [`codecs`](https://python-all.ru/3.3/library/codecs.html#module-codecs).247