Python3 Обзор стандартной библиотеки

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

Ниже приведены некоторые модули стандартной библиотеки Python3:

  • Модуль os: Модуль os предоставляет множество функций для взаимодействия с операционной системой, таких как создание, перемещение и удаление файлов и каталогов, а также доступ к переменным среды.

  • Модуль sys: Модуль sys предоставляет функции, связанные с интерпретатором Python и системой, такие как версия и путь интерпретатора, а также информацию о stdin, stdout и stderr.

  • Модуль time: Модуль time предоставляет функции для работы со временем, такие как получение текущего времени, форматирование даты и времени, измерение времени и т. д.

  • Модуль datetime: Модуль datetime предоставляет более продвинутые функции обработки даты и времени, такие как работа с часовыми поясами, вычисление разницы во времени, вычисление разницы дат и т. д.

  • модуль random: Модуль random предоставляет функции для генерации случайных чисел, такие как генерация случайных целых чисел, чисел с плавающей запятой, последовательностей и т. д.

  • модуль math: Модуль math предоставляет математические функции, такие как тригонометрические функции, логарифмические функции, экспоненциальные функции, константы и т. д.

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

  • модуль json: Модуль json предоставляет функции кодирования и декодирования JSON, которые могут преобразовывать объекты Python в формат JSON и разбирать объекты Python из формата JSON.

  • модуль urllib: Модуль urllib предоставляет функции для доступа к веб-страницам и обработки URL, включая скачивание файлов, отправку POST-запросов, обработку cookies и т. д.

Интерфейс операционной системы

Модуль os предоставляет множество функций, связанных с операционной системой, таких как операции с файлами и каталогами.

Пример

import os

# Получить текущий рабочий каталог
current_dir = os.getcwd()
print("Текущий рабочий каталог:", current_dir)

# Вывести список файлов в каталоге
files = os.listdir(current_dir)
print("Файлы в каталоге:", files)

Рекомендуется использоватьimport osстиль, а неfrom os import *, это гарантирует, что зависящее от операционной системыos.open()не переопределит встроенную функцию open().

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

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

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

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

Подстановочные знаки в файлах

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

Пример

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

Аргументы командной строки

Обычные служебные скрипты часто используют аргументы командной строки. Эти аргументы командной строки хранятся в переменной argv модуля sys в виде списка. Например, после выполнения "python demo.py one two three" в командной строке можно получить следующий вывод:

Пример

>>> import sys
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']

Перенаправление вывода ошибок и завершение программы

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

Пример

>>> sys.stderr.write('Предупреждение: файл журнала не найден, начинаем новый\n')
Предупреждение:, файл журнала не найден, начинаем новый one

Большинство сценариев используют управляемое завершениеsys.exit()。


Сопоставление строк с регулярными выражениями

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'

Math

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.17970987693706186
>>> random.randrange(6)    # случайное целое число, выбранное из range(6)
4

Доступ к Интернету

Существует несколько модулей для доступа к интернету и работы с сетевыми протоколами связи. Два самых простых — urllib.request для обработки данных, получаемых из URL, и smtplib для отправки электронной почты:

Пример

>>> from urllib.request import urlopen
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
...     line = line.decode('utf-8')  # Декодирование двоичных данных в текст.
...     if 'EST' in line or 'EDT' in line:  # искать восточное время
...         print(line)

<BR>нояб. 25, 09:43:32 PM EST

>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('[email protected]', '[email protected]',
... """To: [email protected]
... From: [email protected]
...
... Бойтесь мартовских ид.
... """
)
>>> server.quit()

Обратите внимание, что второй пример требует локально запущенного почтового сервера.


Дата и время

datetimeМодуль предоставляет как простые, так и сложные методы для обработки даты и времени.

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

Пример

import datetime

# Получить текущую дату и время
current_datetime = datetime.datetime.now()
print(current_datetime)

# Получите текущую дату
current_date = datetime.date.today()
print(current_date)

# Форматирование даты
formatted_datetime = current_datetime.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_datetime)  # Вывод: 2023-07-17 15:30:45

Результат вывода:

2023-07-17 18:37:56.036914
2023-07-17
2023-07-17 18:37:56

Модуль также поддерживает работу с часовыми поясами:

>>> # 导入了 datetime 模块中的 date 类
>>> from datetime import date
>>> now = date.today()    # 当前日期
>>> now
datetime.date(2023, 7, 17)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'07-17-23. 17 Jul 2023 is a Monday on the 17 day of July.'

>>> # 创建了一个表示生日的日期对象
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday   # 计算两个日期之间的时间差
>>> age.days             # 变量age的days属性,表示时间差的天数
21535

Сжатие данных

Следующие модули напрямую поддерживают распространённые форматы упаковки и сжатия данных: zlib, gzip, bz2, 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

Измерение производительности

Некоторые пользователи хотят знать различия в производительности между разными методами решения одной и той же задачи. 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, модули :mod:profile и pstats предоставляют инструменты измерения времени для более крупных блоков кода.


Тестирование модулей

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

Модуль doctest предоставляет инструмент, который сканирует модули и выполняет тесты на основе встроенных строк документации в программе.

Построение теста так же просто, как вырезание и вставка его вывода в docstring.

Благодаря предоставленным пользователем примерам он улучшает документацию, позволяя модулю doctest проверять, совпадают ли результаты кода с документацией:

def average(values):
    """Computes the arithmetic mean of a list of numbers.

    >>> 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)
        self.assertRaises(ZeroDivisionError, average, [])
        self.assertRaises(TypeError, average, 20, 30, 70)

unittest.main() # Calling from the command line invokes all tests

То, что мы видели выше, — это лишь часть модулей стандартной библиотеки Python3. Есть много других модулей. Полную документацию стандартной библиотеки можно посмотреть в официальной документации:https://docs.python.org/zh-cn/3/library/index.html

Другие расширения