Python: полный мануал с примерами и справочником функций
Полный практический мануал Python: от установки и синтаксиса до файлов, сети, тестов и проектов. 25 глав, справочник функций и методов, упражнения с решениями и 195 проверенных примеров.

Python удобно изучать на задачах: посчитать расходы, разобрать текст, прочитать файл, собрать отчёт. В этом руководстве пройдём путь от установки и первых выражений до функций, классов, сети, тестов и самостоятельных проектов.
Выберите одну из 25 глав или найдите нужную функцию через поиск. В справочнике собраны все 73 позиции официальной таблицы встроенных функций и типов Python 3.15, а также 161 метод и 12 свойств строк, коллекций и путей. Для каждой позиции есть назначение, важный нюанс и ссылка на первичную документацию.
Код можно копировать и скачивать. 195 самостоятельных примеров проверены запуском на Python 3.15.0; у упражнений есть решения и ожидаемый результат. Новые возможности языка отмечены в тексте, а интерактивные фрагменты и команды установки объяснены отдельно.
Если начинаете с нуля, открывайте главы по порядку. Если решаете конкретную задачу, ищите по-русски или по имени Python: open, str.split, Path.read_text.
Все главы руководства 25
Глава 12 · начальный
Файлы, пути и кодировки
Прочитайте файл, выберите кодировку, обработайте строки и сохраните результат в понятной папке.
Запишите текст и прочитайте его обратно
Для первого опыта нужна своя учебная папка, а не настоящий рабочий документ. Следующий скрипт создаёт временный каталог, записывает русский текст и читает его обратно. После выхода из TemporaryDirectory каталог удаляется автоматически. Получается полный цикл: путь, данные, запись и проверка результата. При обычном запуске замените временную папку явно выбранным каталогом своего проекта; не оставляйте это решение случайной текущей директории.
from pathlib import Path
from tempfile import TemporaryDirectory
with TemporaryDirectory() as folder:
path = Path(folder) / "note.txt"
path.write_text("Привет, Python!\n", encoding="utf-8")
print(path.read_text(encoding="utf-8"), end="")
print(path.name, path.suffix)
Привет, Python! note.txt .txt
Path описывает путь; он не создаёт файл при конструировании. Оператор / соединяет части пути с разделителями нужной платформы. Свойства name, suffix, stem и parent помогают разобрать его без ручной обработки слешей. Если важно знать число записанных символов, сохраните результат write_text. Это число символов текста, а не обязательно количество байтов на диске: кириллица в UTF-8 кодируется несколькими байтами.
Откуда считается относительный путь
Путь Path("data/input.txt") считается от текущей рабочей папки процесса, которую показывает Path.cwd(). Она может отличаться от папки скрипта: редактор, терминал и планировщик запускают программу по разным правилам. Поэтому инструкция «положите файл рядом» недостаточна. Для ресурса рядом с обычным скриптом можно взять Path(__file__).resolve().parent; для установленного пакета лучше использовать importlib.resources. В интерактивной оболочке переменной __file__ обычно нет.
Для пользовательского входного файла удобнее принимать путь параметром и показывать, какой файл выбран. Не меняйте рабочую папку через os.chdir только ради одного чтения: это влияет на остальные относительные пути программы и особенно затрудняет работу потоков. В Windows строка с обратными слешами может содержать управляющие последовательности. Используйте Path и отдельные компоненты либо raw-строку, помня, что raw-строка не может оканчиваться одиночным обратным слешем.
Текст — это символы, файл — это байты
Текстовый режим превращает байты в str с указанной кодировкой; двоичный режим rb возвращает bytes без такого преобразования. Для изображения или архива подходят read_bytes и write_bytes. Для текстового обмена явно указывайте encoding="utf-8". В Python 3.15 UTF-8 используется по умолчанию при обычной конфигурации, однако эту настройку можно отключить; явная кодировка также сохраняет договорённость при запуске в более старой среде.
Если получаете UnicodeDecodeError, сначала выясните формат исходного файла. У экспортов старых программ может быть другая кодировка; у UTF-8-файла с BOM полезно чтение через utf-8-sig. Режимы errors="ignore" и errors="replace" позволяют потерять или изменить символы, поэтому не годятся как автоматическое исправление отчёта. Сохраняйте исходник и выбирайте такую политику только там, где потеря текста явно допустима и заметна пользователю.
Читайте большой текст по строкам
read_text удобно для небольшого файла, который целиком помещается в память. Для журнала или длинной выгрузки используйте with path.open(...) и цикл по файловому объекту. Контекстный менеджер закроет файл и при успешном завершении, и при исключении. В примере считаются только непустые строки. Вызов strip() здесь применяется для проверки пустоты, а не для изменения сохраняемых данных: пробелы внутри исходной строки могут быть значимыми.
from pathlib import Path
count = 0
with Path("lines.txt").open(encoding="utf-8") as stream:
for line in stream:
if line.strip():
count += 1
print("Непустых строк:", count)
Непустых строк: 2
По умолчанию текстовое чтение нормализует распространённые окончания строк. При записи newline="\n" позволяет зафиксировать LF для переносимого текстового формата. Для CSV обычно задают newline="" и поручают разделители строк модулю csv. Если формат требует точного сохранения байтов, обработка должна идти в двоичном режиме: текстовая нормализация тогда лишняя. Нельзя бездумно делить CSV по переводам строки, поскольку поле в кавычках может само содержать перенос.
Запись, добавление и замена результата
Режим w обнуляет существующий файл при открытии; a дописывает в конец; x создаёт новый файл и выдаёт FileExistsError, если имя занято. Выберите поведение заранее. Для результата расчёта обычно полезнее сначала полностью сформировать текст и записать соседний временный файл, затем заменить целевой через replace. Так ошибка расчёта не оставит полупустой прежний отчёт. Это не универсальная гарантия сохранности при отключении питания: требования к синхронизации и файловой системе рассматриваются отдельно.
from pathlib import Path
from tempfile import TemporaryDirectory
with TemporaryDirectory() as folder:
root = Path(folder)
target = root / "report.txt"
target.write_text("старый результат\n", encoding="utf-8")
temporary = root / "report.pending"
with temporary.open("x", encoding="utf-8", newline="\n") as stream:
stream.write("строк: 3\n")
temporary.replace(target)
print(target.read_text(encoding="utf-8"), end="")
print("Временный файл остался:", temporary.exists())
строк: 3 Временный файл остался: False
Сначала составьте список, затем обрабатывайте
mkdir(parents=True, exist_ok=True) создаёт папку и необходимые родительские каталоги. glob("*.txt") выбирает совпадающие имена, а rglob обходит вложенные каталоги. Не полагайтесь на порядок файловой системы: сортируйте список для воспроизводимого отчёта. Проверка is_file() исключит каталоги, однако символическая ссылка может вести к файлу за пределами выбранной папки. Политику работы со ссылками нужно задавать отдельно, особенно для внешних архивов и пользовательских каталогов.
from pathlib import Path
from tempfile import TemporaryDirectory
import shutil
with TemporaryDirectory() as folder:
root = Path(folder)
source, destination = root / "source", root / "copy"
source.mkdir()
destination.mkdir()
for name in ["b.txt", "a.txt", "notes.md"]:
(source / name).write_text(name, encoding="utf-8")
plan = sorted(path for path in source.glob("*.txt") if path.is_file())
print("План:", ", ".join(path.name for path in plan))
for path in plan:
shutil.copy2(path, destination / path.name)
print("Копий:", len(list(destination.glob("*.txt"))))
План: a.txt, b.txt Копий: 2
Обрабатывайте реальную ошибку открытия
Проверка exists() не гарантирует успешное последующее открытие: файл могут удалить, права могут измениться, а путь может указывать на каталог. Обрабатывайте FileNotFoundError, PermissionError или нужный OSError вокруг самой операции и сообщайте, что не получилось сделать. Не превращайте любую ошибку в «файл не найден»: причина важна для исправления. resolve() нормализует путь и разрешает ссылки, но сам по себе не запрещает выход за разрешённый каталог; такую границу программа проверяет отдельно.
Практика: отчёт без изменения исходников
Составьте список учебных TXT-файлов, отсортируйте его и посчитайте суммарное количество непустых строк. Сначала напечатайте план обработки, затем итог. Проверьте пустую папку и файл только из пробелов: оба случая должны давать ноль, а не ошибку. В решении исходные файлы не изменяются; отчёт не включает себя в список входных данных, потому что результат выводится отдельно.
Посмотреть решение
from pathlib import Path
from tempfile import TemporaryDirectory
with TemporaryDirectory() as folder:
root = Path(folder)
(root / "a.txt").write_text("один\n\nдва\n", encoding="utf-8")
(root / "b.txt").write_text(" \n", encoding="utf-8")
paths = sorted(root.glob("*.txt"))
total = 0
for path in paths:
with path.open(encoding="utf-8") as stream:
total += sum(bool(line.strip()) for line in stream)
print("План:", ", ".join(path.name for path in paths))
print("Всего:", total)
print("Пустая папка:", sum(1 for _ in (root / "missing").glob("*.txt")))
План: a.txt, b.txt Всего: 2 Пустая папка: 0
Методы и свойства pathlib.PurePath и pathlib.Path
Все 57 публичных методов и 12 свойств с отдельными сигнатурами PurePath.* и Path.*; методы PurePath доступны также у Path. Конструкторы и специальные методы сюда не включены.
PurePath.as_posixМетод · Синтаксис пути
Возвращает текст пути с прямыми слешами.
Нюанс. Не преобразует Windows-путь в путь реально существующего POSIX-файла.
Официальная документация: PurePath.as_posixPurePath.is_absoluteМетод · Синтаксис пути
Проверяет полноту абсолютного пути.
Нюанс. В Windows нужны и корень, и диск либо UNC-ресурс; один начальный слеш недостаточен.
Официальная документация: PurePath.is_absolutePurePath.is_relative_toМетод · Синтаксис пути
Проверяет лексическую вложенность в другой путь.
Нюанс. Не проверяет файловую систему и не разрешает символические ссылки или сегменты .. .
Официальная документация: PurePath.is_relative_toPurePath.joinpathМетод · Синтаксис пути
Соединяет путь с дополнительными сегментами.
Нюанс. Абсолютный сегмент может заменить ранее заданную часть пути.
Официальная документация: PurePath.joinpathPurePath.full_matchМетод · Шаблоны
Проверяет весь путь по glob-шаблону.
Нюанс. Поддерживает рекурсивный **; регистр по умолчанию зависит от вида пути.
Официальная документация: PurePath.full_matchPurePath.matchМетод · Шаблоны
Проверяет путь по нерекурсивному glob-шаблону.
Нюанс. Относительный шаблон проверяется с правого края; ** здесь ведёт себя как *.
Официальная документация: PurePath.matchPurePath.relative_toМетод · Синтаксис пути
Строит относительный путь к указанной основе.
Нюанс. Без walk_up=True невложенный путь вызывает ValueError; операция остаётся лексической.
Официальная документация: PurePath.relative_toPurePath.with_nameМетод · Синтаксис пути
Создаёт путь с другим последним компонентом.
Нюанс. Файл не переименовывается; у пути без имени возникает ValueError.
Официальная документация: PurePath.with_namePurePath.with_stemМетод · Синтаксис пути
Создаёт путь с другим именем без последнего расширения.
Нюанс. У archive.tar.gz сохраняется только .gz, поэтому .tar не сохраняется как отдельное расширение.
Официальная документация: PurePath.with_stemPurePath.with_suffixМетод · Синтаксис пути
Создаёт путь с другим последним расширением.
Нюанс. Пустая строка удаляет расширение; никаких операций с файлом не происходит.
Официальная документация: PurePath.with_suffixPurePath.with_segmentsМетод · Расширение классов
Создаёт производный путь того же типа из сегментов.
Нюанс. Основное применение — перенос дополнительного состояния в подклассах PurePath.
Официальная документация: PurePath.with_segmentsPath.from_uriМетод · URI
Создаёт путь из URI схемы file.
Нюанс. Неверная схема или не-абсолютный путь вызывает ValueError.
Официальная документация: Path.from_uriPath.as_uriМетод · URI
Представляет абсолютный путь URI схемы file.
Нюанс. Относительный путь вызывает ValueError.
Официальная документация: Path.as_uriPath.homeМетод · Синтаксис пути
Возвращает домашний каталог пользователя.
Нюанс. Если домашний каталог определить нельзя, возникает RuntimeError.
Официальная документация: Path.homePath.expanduserМетод · Синтаксис пути
Раскрывает начальные ~ и ~user.
Нюанс. Неопределимый домашний каталог вызывает RuntimeError.
Официальная документация: Path.expanduserPath.cwdМетод · Синтаксис пути
Возвращает текущий рабочий каталог процесса.
Нюанс. Это рабочий каталог, а не обязательно каталог файла программы.
Официальная документация: Path.cwdPath.absoluteМетод · Синтаксис пути
Создаёт абсолютный путь относительно рабочего каталога.
Нюанс. Не нормализует .. и не разрешает символические ссылки.
Официальная документация: Path.absolutePath.resolveМетод · Синтаксис пути
Создаёт абсолютный путь с разрешёнными ссылками и сегментами .. .
Нюанс. При strict=False отсутствующий остаток пути сохраняется без проверки существования.
Официальная документация: Path.resolvePath.readlinkМетод · Ссылки
Читает целевой путь символической ссылки.
Нюанс. Относительная цель может остаться относительной; это не то же, что resolve().
Официальная документация: Path.readlinkPath.statМетод · Сведения
Получает свежие сведения о файле.
Нюанс. По умолчанию следует символическим ссылкам; follow_symlinks=False читает саму ссылку.
Официальная документация: Path.statPath.lstatМетод · Сведения
Получает сведения о самой символической ссылке.
Нюанс. Не переходит к целевому файлу ссылки.
Официальная документация: Path.lstatPath.existsМетод · Проверки
Проверяет существование объекта файловой системы.
Нюанс. False также возможен при недоступности или неверном пути; причины различают через stat().
Официальная документация: Path.existsPath.is_fileМетод · Проверки
Проверяет, является ли объект обычным файлом.
Нюанс. По умолчанию следует ссылкам; False не доказывает отсутствие объекта.
Официальная документация: Path.is_filePath.is_dirМетод · Проверки
Проверяет, является ли объект каталогом.
Нюанс. По умолчанию следует ссылкам; недоступный путь также может дать False.
Официальная документация: Path.is_dirPath.is_symlinkМетод · Проверки
Проверяет, является ли путь символической ссылкой.
Нюанс. Сломанная ссылка тоже возвращает True.
Официальная документация: Path.is_symlinkPath.is_junctionМетод · Проверки
Проверяет наличие Windows junction.
Нюанс. Такой тип соединения каталогов поддерживается только в Windows.
Официальная документация: Path.is_junctionPath.is_mountМетод · Проверки
Проверяет, является ли путь точкой подключения файловой системы.
Нюанс. В Windows учитывает корни дисков, UNC-ресурсы и подключённые каталоги.
Официальная документация: Path.is_mountPath.is_socketМетод · Проверки
Проверяет тип Unix socket.
Нюанс. Это проверка типа объекта файловой системы, а не доступности сетевого сервиса.
Официальная документация: Path.is_socketPath.is_fifoМетод · Проверки
Проверяет тип именованного канала FIFO.
Нюанс. False также возвращается для отсутствующего или недоступного пути.
Официальная документация: Path.is_fifoPath.is_block_deviceМетод · Проверки
Проверяет тип блочного устройства.
Нюанс. False также возвращается для отсутствующего или недоступного пути.
Официальная документация: Path.is_block_devicePath.is_char_deviceМетод · Проверки
Проверяет тип символьного устройства.
Нюанс. False также возвращается для отсутствующего или недоступного пути.
Официальная документация: Path.is_char_devicePath.samefileМетод · Проверки
Проверяет, указывают ли два пути на один файл.
Нюанс. Сравнивает файловые объекты, а не строки; недоступность может вызвать OSError.
Официальная документация: Path.samefilePath.openМетод · Чтение и запись
Открывает файл и возвращает объект потока.
Нюанс. Поток нужно закрыть, обычно конструкцией with.
Официальная документация: Path.openPath.read_textМетод · Чтение и запись
Читает весь файл как строку и закрывает его.
Нюанс. Весь текст загружается в память; кодировку можно задать явно.
Официальная документация: Path.read_textPath.read_bytesМетод · Чтение и запись
Читает весь файл как bytes и закрывает его.
Нюанс. Большой файл целиком занимает память.
Официальная документация: Path.read_bytesPath.write_textМетод · Чтение и запись
Записывает строку в файл и закрывает его.
Нюанс. Существующий файл перезаписывается; возвращает число записанных символов.
Официальная документация: Path.write_textPath.write_bytesМетод · Чтение и запись
Записывает bytes в файл и закрывает его.
Нюанс. Существующий файл перезаписывается; возвращает число записанных байтов.
Официальная документация: Path.write_bytesPath.iterdirМетод · Обход
Перебирает непосредственные дочерние пути каталога.
Нюанс. Порядок не гарантируется; это не рекурсивный обход.
Официальная документация: Path.iterdirPath.globМетод · Обход
Перебирает пути по glob-шаблону внутри каталога.
Нюанс. Возвращает объекты любого типа и не гарантирует порядок; для рекурсии применяют **.
Официальная документация: Path.globPath.rglobМетод · Обход
Рекурсивно перебирает пути по glob-шаблону.
Нюанс. Ошибки сканирования OSError подавляются, поэтому результат может быть неполным.
Официальная документация: Path.rglobPath.walkМетод · Обход
Перебирает дерево каталогов с именами каталогов и файлов.
Нюанс. По умолчанию не следует ссылкам; follow_symlinks=True способен привести к циклическому обходу.
Официальная документация: Path.walkPath.touchМетод · Создание
Создаёт файл либо обновляет его время изменения.
Нюанс. Существующий файл с exist_ok=True не обнуляется; exist_ok=False вызывает FileExistsError.
Официальная документация: Path.touchPath.mkdirМетод · Создание
Создаёт каталог и при необходимости недостающих родителей.
Нюанс. parents и exist_ok по умолчанию выключены; в 3.15 появился отдельный parent_mode.
Официальная документация: Path.mkdirPath.symlink_toМетод · Ссылки
Создаёт символическую ссылку в данном пути на target.
Нюанс. Порядок ссылка–цель противоположен os.symlink(); Windows учитывает target_is_directory.
Официальная документация: Path.symlink_toPath.hardlink_toМетод · Ссылки
Создаёт жёсткую ссылку в данном пути на target.
Нюанс. Порядок ссылка–цель противоположен os.link().
Официальная документация: Path.hardlink_toPath.copyМетод · Копирование и перемещение
Копирует файл или дерево каталогов в target.
Нюанс. По умолчанию не гарантирует сохранение всех метаданных; существующий целевой файл может быть заменён.
Официальная документация: Path.copyPath.copy_intoМетод · Копирование и перемещение
Копирует файл или дерево внутрь существующего каталога.
Нюанс. target_dir должен быть существующим каталогом; метод появился в 3.14.
Официальная документация: Path.copy_intoPath.renameМетод · Копирование и перемещение
Переименовывает файл или каталог и возвращает новый путь.
Нюанс. При существующей цели Unix и Windows ведут себя по-разному; относительная цель считается от cwd.
Официальная документация: Path.renamePath.replaceМетод · Копирование и перемещение
Переименовывает объект с заменой допустимой существующей цели.
Нюанс. Существующий файл или пустой каталог заменяется; относительная цель считается от cwd.
Официальная документация: Path.replacePath.moveМетод · Копирование и перемещение
Перемещает файл или дерево каталогов в target.
Нюанс. Между файловыми системами выполняется копирование с удалением; операция не становится атомарной.
Официальная документация: Path.movePath.move_intoМетод · Копирование и перемещение
Перемещает файл или дерево внутрь существующего каталога.
Нюанс. target_dir должен быть существующим каталогом; метод появился в 3.14.
Официальная документация: Path.move_intoPath.unlinkМетод · Удаление
Удаляет файл или символическую ссылку.
Нюанс. Каталоги не удаляет; missing_ok=True игнорирует только отсутствие файла.
Официальная документация: Path.unlinkPath.rmdirМетод · Удаление
Удаляет каталог.
Нюанс. Каталог должен быть пустым.
Официальная документация: Path.rmdirPath.ownerМетод · Права
Возвращает имя владельца файла.
Нюанс. Без модуля pwd операция не поддерживается; это существенно для Windows.
Официальная документация: Path.ownerPath.groupМетод · Права
Возвращает имя группы владельца файла.
Нюанс. Без модуля grp операция не поддерживается; это существенно для Windows.
Официальная документация: Path.groupPath.chmodМетод · Права
Меняет режим и права файла.
Нюанс. По умолчанию следует ссылкам; поддержка отдельных прав зависит от платформы.
Официальная документация: Path.chmodPath.lchmodМетод · Права
Меняет права самой символической ссылки.
Нюанс. Поддержка изменения прав ссылок зависит от платформы.
Официальная документация: Path.lchmodPurePath.partsСвойство · Свойства
Возвращает кортеж компонентов пути.
Нюанс. Диск и корень Windows объединены в первый компонент.
Официальная документация: PurePath.partsPurePath.parserСвойство · Свойства
Даёт модуль разбора пути posixpath или ntpath.
Нюанс. Выбор определяется видом пути, а не содержимым файловой системы.
Официальная документация: PurePath.parserPurePath.driveСвойство · Свойства
Возвращает диск или UNC-ресурс.
Нюанс. У POSIX-пути и некоторых Windows-путей строка пуста.
Официальная документация: PurePath.drivePurePath.rootСвойство · Свойства
Возвращает корневой компонент пути.
Нюанс. У Windows-пути C:folder корень отсутствует.
Официальная документация: PurePath.rootPurePath.anchorСвойство · Свойства
Возвращает объединение drive и root.
Нюанс. Непустой anchor сам по себе не гарантирует абсолютность Windows-пути.
Официальная документация: PurePath.anchorPurePath.parentsСвойство · Свойства
Даёт последовательность лексических родительских путей.
Нюанс. Не разрешает ссылки; поддерживает срезы и отрицательные индексы.
Официальная документация: PurePath.parentsPurePath.parentСвойство · Свойства
Возвращает непосредственный лексический родительский путь.
Нюанс. На корне или пустом пути не поднимается выше; .. предварительно не устраняется.
Официальная документация: PurePath.parentPurePath.nameСвойство · Свойства
Возвращает последний компонент без диска и корня.
Нюанс. У корня или самого UNC-ресурса может быть пустым.
Официальная документация: PurePath.namePurePath.suffixСвойство · Свойства
Возвращает последнее расширение с точкой.
Нюанс. Для archive.tar.gz это .gz; одиночная точка считается расширением с 3.14.
Официальная документация: PurePath.suffixPurePath.suffixesСвойство · Свойства
Возвращает список расширений имени.
Нюанс. Для archive.tar.gz это ['.tar', '.gz'], а не одно целое расширение.
Официальная документация: PurePath.suffixesPurePath.stemСвойство · Свойства
Возвращает последнее имя без последнего расширения.
Нюанс. У archive.tar.gz это archive.tar.
Официальная документация: PurePath.stemPath.infoСвойство · Свойства
Предоставляет объект кешируемых проверок типа файла.
Нюанс. Кеш может устареть; для свежей проверки используют Path.exists()/is_file()/is_dir().
Официальная документация: Path.infoМетоды и свойства Методы объекта Path.info
Все четыре метода официального протокола pathlib.types.PathInfo, получаемого через Path.info.
PathInfo.existsМетод · Кешируемые проверки
Проверяет существование через объект Path.info.
Нюанс. Результат может быть кеширован; follow_symlinks=False проверяет существование самой ссылки.
Официальная документация: PathInfo.existsPathInfo.is_dirМетод · Кешируемые проверки
Проверяет тип каталога через объект Path.info.
Нюанс. Результат может быть кеширован; обновление файловой системы не обязано сбросить кеш.
Официальная документация: PathInfo.is_dirPathInfo.is_fileМетод · Кешируемые проверки
Проверяет тип файла через объект Path.info.
Нюанс. Результат может быть кеширован; для актуальной проверки используйте Path.is_file().
Официальная документация: PathInfo.is_filePathInfo.is_symlinkМетод · Кешируемые проверки
Проверяет тип ссылки через объект Path.info.
Нюанс. Сломанная ссылка подходит, а результат может быть кеширован.
Официальная документация: PathInfo.is_symlinkПервичные источники главы:
Примеры и материалы с собой
Архив содержит наши самостоятельные примеры, тестовые данные, ожидаемый результат и README. Указанные команды установки и фрагменты REPL отделены от скриптов, которые проверены запуском.
Сверено с официальной документацией 2026-10-12. Стандартная библиотека и сторонние пакеты различаются; ссылки на источники есть в каждой главе.


