Обзор возможностей стандартных библиотек 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