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

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

Практические примеры работы со стандартными библиотеками Python

Как преобразовать словарь в строку JSON и обратно?

Модуль json - основное средство. Функция dumps() преобразует объект в строку. Параметр ensure_ascii=False сохраняет не-ASCII символы.

import json
data = {'name': 'Алиса', 'age': 30}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)

Python module site (модуль site в python)

{
  "name": "Алиса",
  "age": 30
}

стандартные библиотеки python (стандартные библиотеки python)

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

Модуль pickle сериализует произвольные объекты.

import pickle
with open('data.pkl', 'wb') as f:
    pickle.dump(data, f)

Python random py (использование модуля random)

Проблема: pickle небезопасен, формат нечитаем.

Как быстро сериализовать код?

Модуль marshal для внутреннего использования, нестабилен.

import marshal
with open('data.marshal', 'wb') as f:
    marshal.dump(data, f)

Как получить путь к домашней директории и объединить с именем файла?

Модуль pathlib рекомендуется. Path.home() и оператор /.

from pathlib import Path
home = Path.home()
file_path = home / 'Documents' / 'report.txt'
print(file_path)
/home/user/Documents/report.txt

Как сделать то же через os.path?

os.path.expanduser и os.path.join.

import os
home = os.path.expanduser('~')
file_path = os.path.join(home, 'Documents', 'report.txt')
print(file_path)

Проблема: на Windows получаются обратные слэши, pathlib универсальнее.

Как получить текущую дату и время в строковом формате?

Модуль datetime - класс datetime. Методы now() и strftime().

from datetime import datetime
now = datetime.now()
formatted = now.strftime('%Y-%m-%d %H:%M:%S')
print(formatted)
2025-03-25 10:30:45

Какие альтернативы в модуле time?

time.strftime работает с UNIX-временем.

import time
formatted = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
print(formatted)

Проблема: time не имеет объектов даты, сложнее арифметика.

Как подсчитать частоту элементов в списке?

Counter из collections.

from collections import Counter
words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
cnt = Counter(words)
print(cnt)
Counter({'apple': 3, 'banana': 2, 'orange': 1})

Как сделать с обычным словарём?

cnt = {}
for w in words:
    cnt[w] = cnt.get(w, 0) + 1
print(cnt)

Проблема: код длиннее, нет методов Counter.

Как найти все вхождения паттерна в строке?

Модуль re, функция re.findall().

import re
text = '123 abc 456 def 789'
numbers = re.findall(r'\d+', text)
print(numbers)
['123', '456', '789']

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

pattern = re.compile(r'\d+')
numbers = pattern.findall(text)
print(numbers)

Как сгенерировать случайное целое число?

random.randint().

import random
n = random.randint(1, 10)
print(n)

Как получить случайный элемент из списка?

items = ['a','b','c']
item = random.choice(items)
print(item)

Как получить комбинации элементов?

itertools.combinations().

from itertools import combinations
list(combinations(['A','B','C'],2))
[('A', 'B'), ('A', 'C'), ('B', 'C')]

Как получить декартово произведение?

from itertools import product
list(product([1,2], ['a','b']))
[(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]

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

JSON: сериализация объектов datetime

Пример
import json
from datetime import datetime, date

class DateTimeEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, (datetime, date)):
            return obj.isoformat()
        return super().default(obj)

data = {'event': 'конференция', 'date': datetime(2025, 5, 15, 10, 30)}
json_str = json.dumps(data, cls=DateTimeEncoder, ensure_ascii=False, indent=2)
print(json_str)
{
  "event": "конференция",
  "date": "2025-05-15T10:30:00"
}

Обработка некорректного JSON

Пример
bad_json = '{"name": "Alice", "age": }'
try:
    data = json.loads(bad_json)
except json.JSONDecodeError as e:
    print(f"Ошибка: {e}")
Ошибка: Expecting value: line 1 column 25 (char 24)

Pathlib: обход дерева каталогов с glob

Пример
from pathlib import Path
home = Path.home()
py_files = home.rglob('*.py')
for f in list(py_files)[:5]:
    print(f)
/home/user/project/main.py
/home/user/project/utils.py
...

Создание временной директории

Пример
import tempfile
from pathlib import Path
with tempfile.TemporaryDirectory() as tmpdir:
    tmp_path = Path(tmpdir)
    new_file = tmp_path / 'test.txt'
    new_file.write_text('hello')
    print(new_file.read_text())
# после выхода блоки удаляется
hello

Datetime: работа с временными зонами (timezone)

Пример
from datetime import datetime, timezone, timedelta
utc_now = datetime.now(timezone.utc)
moscow_tz = timezone(timedelta(hours=3))
moscow_now = utc_now.astimezone(moscow_tz)
print(utc_now.isoformat())
print(moscow_now.isoformat())
2025-03-25T07:30:00+00:00
2025-03-25T10:30:00+03:00

Разбор строки с датой

Пример
from datetime import datetime
date_str = '2025-03-25 10:30:45'
dt = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
print(dt)
2025-03-25 10:30:45

Collections: OrderedDict для порядка ключей

Пример
from collections import OrderedDict
od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3
for k, v in od.items():
    print(k, v)
a 1
b 2
c 3

deque как очередь

Пример
from collections import deque
q = deque(['a', 'b', 'c'])
q.append('d')
q.popleft()
print(q)
deque(['b', 'c', 'd'])

Re: замена с использованием callback

Пример
import re
text = '12 apples, 34 bananas, 56 cherries'
def multiply(match):
    number = int(match.group())
    return str(number * 2)
result = re.sub(r'\d+', multiply, text)
print(result)
24 apples, 68 bananas, 112 cherries

Проверка email

Пример
import re
email = 'user@example.com'
pattern = r'^[\w\.-]+@[\w\.-]+\.\w{2,4}$'
if re.match(pattern, email):
    print('Email корректен')
else:
    print('Email некорректен')
Email корректен

Random: генерация пароля

Пример
import random
import string
password = ''.join(random.choices(string.ascii_letters + string.digits, k=12))
print(password)
aB3kL9zQwX1m

Itertools: бесконечный цикл с cycle

Пример
from itertools import cycle
colors = cycle(['red', 'green', 'blue'])
for i, color in zip(range(5), colors):
    print(i, color)
0 red
1 green
2 blue
3 red
4 green

Стандартные библиотеки Python - comments

En
стандартные библиотеки python (python)