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 предоставляет множество функций, связанных с операционной системой, таких как операции с файлами и каталогами.
Пример
# Получить текущий рабочий каталог
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 предоставляет функцию для генерации списков файлов с помощью поиска по шаблонам в каталогах:
Пример
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']
Аргументы командной строки
Обычные служебные скрипты часто используют аргументы командной строки. Эти аргументы командной строки хранятся в переменной argv модуля sys в виде списка. Например, после выполнения "python demo.py one two three" в командной строке можно получить следующий вывод:
Пример
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']
Перенаправление вывода ошибок и завершение программы
sys также имеет атрибуты stdin, stdout и stderr; даже когда stdout перенаправлен, последний можно использовать для отображения предупреждений и сообщений об ошибках.
Пример
Предупреждение:, файл журнала не найден, начинаем новый one
Большинство сценариев используют управляемое завершениеsys.exit()。
Сопоставление строк с регулярными выражениями
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 для операций с плавающей запятой:
Пример
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0
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 для отправки электронной почты:
Пример
>>> 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Модуль предоставляет как простые, так и сложные методы для обработки даты и времени.
Хотя поддерживается арифметика даты и времени, реализация ориентирована на более эффективную обработку и форматированный вывод.
Пример
# Получить текущую дату и время
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
Другие расширения