Стандартные библиотеки языка Python

Раздел: Python -> Стандартные библиотеки

Обзор стандартных библиотек Python

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

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

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

import os

# Получить текущую директорию
temp = os.getcwd()
print(temp)

# Создать новую папку
os.mkdir('my_folder')

# Проверить существование файла
print(os.path.exists('my_folder'))

какие библиотеки нужны для python (библиотеки и модули python)

/Users/user/project
True

библиотека время python (библиотека time в python)

Возможные проблемы: При создании папки без проверки существования может возникнуть исключение FileExistsError. Рекомендуется использовать os.path.exists или os.makedirs с параметром exist_ok=True. Также важно учитывать права доступа и кодировку пути.

Как выполнять сложные математические операции?

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

import math

print(math.sqrt(16))   # 4.0
print(math.pi)          # 3.141592653589793
print(math.factorial(5)) # 120
4.0
3.141592653589793
120
Типичные ошибки: Функция sqrt не принимает отрицательные числа (ValueError). Для работы с комплексными числами используется модуль cmath.

Как управлять датами и временем?

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

from datetime import datetime, timedelta

now = datetime.now()
print(now)
print(now.strftime('%Y-%m-%d %H:%M:%S'))
yesterday = now - timedelta(days=1)
print(yesterday)
2025-03-23 12:34:56.789012
2025-03-23 12:34:56
2025-03-22 12:34:56.789012
Распространенные сложности: При работе с часовыми поясами рекомендуется использовать модуль pytz (сторонний) или zoneinfo (доступен с Python 3.9). Неправильное форматирование строки strftime может привести к ошибкам.

Как обмениваться данными в формате JSON?

Модуль json позволяет кодировать и декодировать данные в формате JSON. Пример преобразования словаря в JSON строку и обратно:

import json

data = {'name': 'Alice', 'age': 30}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)

parsed = json.loads(json_str)
print(parsed['name'])
{
  "name": "Alice",
  "age": 30
}
Alice
Возможные проблемы: Параметр ensure_ascii=False необходим для корректного отображения не ASCII символов. При загрузке из файла следует использовать json.load() с открытым файловым объектом.

Как выполнять поиск и замену текста по шаблону?

Модуль re предоставляет поддержку регулярных выражений. Пример поиска всех email адресов в тексте:

import re

text = 'Contact: alice@example.com, bob@test.org'
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
emails = re.findall(pattern, text)
print(emails)
['alice@example.com', 'bob@test.org']
Типичные ошибки: Неэкранированные специальные символы, неправильные квантификаторы. Следует использовать сырые строки (r'...') для избежания экранирования обратной косой черты.

Как использовать специализированные контейнеры данных?

Модуль collections предоставляет дополнительные структуры данных: defaultdict, Counter, OrderedDict и другие. Пример подсчета частоты слов:

from collections import Counter, defaultdict

words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
counter = Counter(words)
print(counter)

# defaultdict для группировки
pairs = [('fruit', 'apple'), ('fruit', 'banana'), ('color', 'red')]
d = defaultdict(list)
for key, value in pairs:
    d[key].append(value)
print(dict(d))
Counter({'apple': 3, 'banana': 2, 'orange': 1})
{'fruit': ['apple', 'banana'], 'color': ['red']}
Возможные проблемы: OrderedDict был полезен до Python 3.7, теперь обычные dict сохраняют порядок вставки. В Counter нельзя напрямую обращаться к отсутствующему ключу без проверки.

Как создавать эффективные итераторы для комбинаторики?

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

import itertools

# Бесконечный цикл
counter = itertools.cycle(['A', 'B', 'C'])
print([next(counter) for _ in range(5)])

# Цепочка итераторов
chain = itertools.chain([1,2], [3,4])
print(list(chain))
['A', 'B', 'C', 'A', 'B']
[1, 2, 3, 4]
Типичные ошибки: Бесконечные итераторы без условия остановки могут привести к зависанию. Функция permutations генерирует много элементов при больших входных данных.

Расширенные примеры использования стандартных библиотек

В этом разделе приведены более сложные примеры, демонстрирующие возможности стандартных библиотек в реальных задачах.

Работа с файловой системой с помощью pathlib

Модуль pathlib предоставляет объектно-ориентированный интерфейс для работы с путями. Пример рекурсивного обхода папки и фильтрации файлов по расширению:

Пример
from pathlib import Path

def find_py_files(directory):
    path = Path(directory)
    if not path.exists():
        return []
    return [str(f) for f in path.rglob('*.py')]

print(find_py_files('/home/user/projects'))
['/home/user/projects/main.py', '/home/user/projects/utils/helper.py']

Создание простого веб-сервера с http.server

Модуль http.server позволяет быстро запустить HTTP сервер для раздачи файлов. Пример запуска сервера на порту 8000:

Пример
from http.server import HTTPServer, SimpleHTTPRequestHandler

server = HTTPServer(('localhost', 8000), SimpleHTTPRequestHandler)
print('Server started at http://localhost:8000')
server.serve_forever()

После запуска можно открыть в браузере http://localhost:8000 - отобразится содержимое текущей директории. Для остановки нажать Ctrl+C.

Парсинг аргументов командной строки с argparse

Модуль argparse упрощает разбор аргументов командной строки. Пример скрипта с опциями --name и --verbose:

Пример
import argparse

parser = argparse.ArgumentParser(description='Пример работы argparse')
parser.add_argument('--name', type=str, help='Имя пользователя', required=True)
parser.add_argument('--verbose', action='store_true', help='Подробный вывод')
args = parser.parse_args()

if args.verbose:
    print(f'Привет, {args.name}! (подробный режим)')
else:
    print(f'Привет, {args.name}!')
$ python script.py --name Alice --verbose
Привет, Alice! (подробный режим)

Многопоточность с threading

Модуль threading позволяет выполнять несколько задач параллельно. Пример запуска двух потоков, которые выводят числа:

Пример
import threading
import time

def print_numbers(prefix, count, delay):
    for i in range(count):
        print(f'{prefix}: {i}')
        time.sleep(delay)

thread1 = threading.Thread(target=print_numbers, args=('A', 3, 0.1))
thread2 = threading.Thread(target=print_numbers, args=('B', 3, 0.15))

thread1.start()
thread2.start()
thread1.join()
thread2.join()
print('Готово')
A: 0
B: 0
A: 1
B: 1
A: 2
B: 2
Готово

Работа с конфигурационными файлами с configparser

Модуль configparser читает и записывает INI-файлы. Пример чтения конфигурации и доступа к секциям:

Пример
import configparser

config = configparser.ConfigParser()
config.read('settings.ini')

database = config['DEFAULT']
print(f'DB host: {database.get("host")}')
print(f'DB port: {database.get("port", "5432")}')

# Создание нового конфига
config2 = configparser.ConfigParser()
config2['DEFAULT'] = {'host': 'localhost', 'port': '3306'}
with open('new_config.ini', 'w') as f:
    config2.write(f)

Предполагается, что файл settings.ini существует. Пример вывода:

DB host: localhost
DB port: 5432

Использование subprocess для запуска внешних команд

Модуль subprocess позволяет запускать внешние процессы и получать их вывод. Пример выполнения команды ls в Linux и захват результата:

Пример
import subprocess

result = subprocess.run(['ls', '-la'], capture_output=True, text=True)
print(result.stdout[:200])  # первые 200 символов

if result.returncode != 0:
    print('Ошибка:', result.stderr)
total 24
drwxr-xr-x  5 user  staff   160 Mar 23 12:00 .
drwxr-xr-x  3 user  staff    96 Mar 23 11:00 ..
-rw-r--r--  1 user  staff   123 Mar 23 12:00 example.py
...

Библиотеки и модули Python - comments

En
какие библиотеки нужны для python (python)