Базовые модули Python для начинающих и опытных
Основные модули стандартной библиотеки Python
Как управлять файловой системой с помощью модуля os?
Основной способ
Модуль os предоставляет функции для работы с операционной системой. Например, получение текущего каталога и список файлов:
import os
current_dir = os.getcwd()
print("Текущий каталог:", current_dir)
files = os.listdir('.')
print("Файлы в каталоге:", files)Python module attributes (атрибуты модуля в python)
Для объединения путей используется os.path.join(), что гарантирует корректный разделитель для платформы.
Вариант с модулем pathlib
Начиная с Python 3.4, рекомендуется использовать pathlib для объектно-ориентированной работы с путями:
from pathlib import Path
current_path = Path.cwd()
print("Текущий каталог:", current_path)
files = list(current_path.iterdir())
print("Файлы:", files)Python module version (версия модуля python)
Такой подход удобнее для цепочек операций и кроссплатформенной совместимости.
Типичные проблемы и ошибки
- Несоответствие слешей: на Windows используется обратный слеш, на Unix - прямой.
os.path.joinрешает эту проблему. - Кодировка имен файлов: на некоторых системах имена могут быть в Unicode. Функции
osвозвращают строки в кодировке по умолчанию; возможны исключенияUnicodeEncodeError. - Отсутствие прав доступа: при попытке прочитать запрещенные каталоги возникает
PermissionError.
Как получить аргументы командной строки и свойства интерпретатора?
Основной способ: sys.argv
Модуль sys содержит список argv с аргументами, переданными скрипту. Первый элемент - имя скрипта.
import sys
print("Имя скрипта:", sys.argv[0])
print("Аргументы:", sys.argv[1:])
Python cpp module (взаимодействие python с модулями c++)
Также доступны sys.path (пути поиска модулей), sys.version (версия Python) и другие.
Вариант с argparse
Для разбора сложных аргументов с флагами и типами используется модуль argparse:
import argparse
parser = argparse.ArgumentParser(description='Пример обработки аргументов')
parser.add_argument('--name', type=str, help='Имя пользователя')
parser.add_argument('--count', type=int, default=1, help='Количество')
args = parser.parse_args()
print(f"Привет, {args.name}! Количество: {args.count}")Python module cv2 (модуль cv2 (opencv) в python)
Типичные проблемы и ошибки
- Индекс за пределами: обращение к
sys.argv[i]без проверки длины вызываетIndexError. - Неправильный тип аргумента: при использовании
argparseможно задать тип, но если пользователь передаст не число дляint, возникнет ошибка.
Какие математические операции доступны в модуле math?
Основные функции
Модуль math содержит тригонометрические, логарифмические, степенные и округляющие функции.
import math
print("Квадратный корень 16:", math.sqrt(16))
print("Синус 30 градусов:", math.sin(math.radians(30)))
print("Число пи:", math.pi)
print("Округление 3.7 вверх:", math.ceil(3.7))
print("Округление 3.2 вниз:", math.floor(3.2))Python encodings module (модуль encodings в python)
Варианты: модули cmath и decimal
Для комплексных чисел используется cmath:
import cmath
print("Квадратный корень из -1:", cmath.sqrt(-1))Platform module python (модуль platform в python)
Для высокой точности десятичных вычислений применяется модуль decimal:
from decimal import Decimal
result = Decimal('0.1') + Decimal('0.2')
print("0.1 + 0.2 =", result) # точный результат 0.3Python string module (модуль string в python)
Типичные проблемы и ошибки
- Ошибка точности float:
0.1 + 0.2не равно0.3из-за представления чисел с плавающей точкой. Для финансовых расчетов следует использоватьdecimal. - Домен ошибки:
math.sqrt(-1)вызываетValueError. Для комплексных чисел нуженcmath.
Как обрабатывать даты и время с помощью модуля datetime?
Основной способ: классы datetime, date, timedelta
from datetime import datetime, timedelta
now = datetime.now()
print("Сейчас:", now)
print("Текущая дата:", now.date())
print("Текущее время:", now.time())
future = now + timedelta(days=7)
print("Через 7 дней:", future)
formatted = now.strftime("%Y-%m-%d %H:%M:%S")
print("Форматированная дата:", formatted)Module sys python (модуль sys в python)
Вариант: модуль time для низкоуровневой работы
import time
timestamp = time.time()
print("Текущая метка времени:", timestamp)
local_time = time.localtime(timestamp)
print("Локальное время:", time.strftime("%Y-%m-%d %H:%M:%S", local_time))Python tkinter module (модуль tkinter в python)
Типичные проблемы и ошибки
- Часовые пояса: по умолчанию
datetime.now()возвращает наивное время (без часового пояса). Для работы с временными зонами используетсяpytzилиzoneinfo(Python 3.9+). - Неправильный формат строки:
strftimeиstrptimeчувствительны к регистру и порядку символов.
Как читать и записывать данные в формате JSON?
Основной способ: модуль json
import json
data = {"name": "Alice", "age": 30, "city": "Moscow"}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print("JSON строка:")
print(json_str)
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
with open("data.json", "r", encoding="utf-8") as f:
loaded = json.load(f)
print("Загруженные данные:", loaded)Python types module (модуль types в python)
Варианты: библиотеки simplejson и orjson
simplejson - форк стандартного модуля с дополнительными возможностями:
import simplejson as json
print(json.dumps({"key": "value"}))Python typing module (модуль typing в python)
orjson - быстрый модуль на Rust:
import orjson
print(orjson.dumps({"key": "value"}).decode())
Типичные проблемы и ошибки
- Сериализация нестандартных объектов:
datetimeили пользовательские классы не могут быть сериализованы по умолчанию. Требуется задать параметрdefault. - Кодировка: без
ensure_ascii=Falseне-ASCII символы будут экранированы (\uXXXX).
Расширенные примеры использования базовых модулей
Ниже приведены более сложные сценарии работы со стандартными библиотеками Python.
1. Рекурсивный обход каталогов с os.walk
import os
for root, dirs, files in os.walk('/tmp'):
for file in files:
print(os.path.join(root, file))
break # только первый уровень для примера
# Результат (зависит от системы) /tmp/file1.txt /tmp/file2.log
2. Обработка аргументов командной строки с argparse
import argparse
parser = argparse.ArgumentParser(description='Поиск файлов')
parser.add_argument('pattern', type=str, help='Шаблон для поиска')
parser.add_argument('--path', default='.', help='Каталог для поиска')
args = parser.parse_args(['*.py', '--path', '/home/user'])
print('Ищем:', args.pattern, 'в', args.path)
Ищем: *.py в /home/user
3. Комбинации и перестановки с itertools
from itertools import combinations, permutations
items = ['A', 'B', 'C']
print('Комбинации по 2:', list(combinations(items, 2)))
print('Перестановки по 2:', list(permutations(items, 2)))
Комбинации по 2: [('A', 'B'), ('A', 'C'), ('B', 'C')]
Перестановки по 2: [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
4. Мемоизация с functools.lru_cache
from functools import lru_cache
@lru_cache(maxsize=32)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print([fibonacci(i) for i in range(10)])
print('Статистика кеша:', fibonacci.cache_info())
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34] Статистика кеша: CacheInfo(hits=8, misses=10, maxsize=32, currsize=10)
5. Подсчет элементов с collections.Counter
from collections import Counter
text = "Python is great and Python is powerful"
words = text.split()
count = Counter(words)
print('Топ 3:', count.most_common(3))
print('Общее число слов:', sum(count.values()))
Топ 3: [('Python', 2), ('is', 2), ('great', 1)]
Общее число слов: 6
6. Работа с часовыми поясами через zoneinfo
from datetime import datetime, timezone, timedelta
import zoneinfo
moscow_tz = zoneinfo.ZoneInfo("Europe/Moscow")
now_moscow = datetime.now(moscow_tz)
print("Московское время:", now_moscow)
utc_time = now_moscow.astimezone(timezone.utc)
print("UTC время:", utc_time)
Московское время: 2025-04-07 14:30:00+03:00 UTC время: 2025-04-07 11:30:00+00:00