Перейти к содержимому
Поиск
Разработка

Python: полный мануал с примерами и справочником функций

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

Александр Некрасов
Python: практический мануал с кодом, папкой и схемой работы

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

Выберите одну из 25 глав или найдите нужную функцию через поиск. В справочнике собраны все 73 позиции официальной таблицы встроенных функций и типов Python 3.15, а также 161 метод и 12 свойств строк, коллекций и путей. Для каждой позиции есть назначение, важный нюанс и ссылка на первичную документацию.

Код можно копировать и скачивать. 195 самостоятельных примеров проверены запуском на Python 3.15.0; у упражнений есть решения и ожидаемый результат. Новые возможности языка отмечены в тексте, а интерактивные фрагменты и команды установки объяснены отдельно.

Если начинаете с нуля, открывайте главы по порядку. Если решаете конкретную задачу, ищите по-русски или по имени Python: open, str.split, Path.read_text.

Python 3.15.025 главПримеры проверены запуском
Все главы руководства 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_posix
PurePath.is_absoluteМетод · Синтаксис пути

Проверяет полноту абсолютного пути.

Нюанс. В Windows нужны и корень, и диск либо UNC-ресурс; один начальный слеш недостаточен.

Официальная документация: PurePath.is_absolute
PurePath.is_relative_toМетод · Синтаксис пути

Проверяет лексическую вложенность в другой путь.

Нюанс. Не проверяет файловую систему и не разрешает символические ссылки или сегменты .. .

Официальная документация: PurePath.is_relative_to
PurePath.joinpathМетод · Синтаксис пути

Соединяет путь с дополнительными сегментами.

Нюанс. Абсолютный сегмент может заменить ранее заданную часть пути.

Официальная документация: PurePath.joinpath
PurePath.full_matchМетод · Шаблоны

Проверяет весь путь по glob-шаблону.

Нюанс. Поддерживает рекурсивный **; регистр по умолчанию зависит от вида пути.

Официальная документация: PurePath.full_match
PurePath.matchМетод · Шаблоны

Проверяет путь по нерекурсивному glob-шаблону.

Нюанс. Относительный шаблон проверяется с правого края; ** здесь ведёт себя как *.

Официальная документация: PurePath.match
PurePath.relative_toМетод · Синтаксис пути

Строит относительный путь к указанной основе.

Нюанс. Без walk_up=True невложенный путь вызывает ValueError; операция остаётся лексической.

Официальная документация: PurePath.relative_to
PurePath.with_nameМетод · Синтаксис пути

Создаёт путь с другим последним компонентом.

Нюанс. Файл не переименовывается; у пути без имени возникает ValueError.

Официальная документация: PurePath.with_name
PurePath.with_stemМетод · Синтаксис пути

Создаёт путь с другим именем без последнего расширения.

Нюанс. У archive.tar.gz сохраняется только .gz, поэтому .tar не сохраняется как отдельное расширение.

Официальная документация: PurePath.with_stem
PurePath.with_suffixМетод · Синтаксис пути

Создаёт путь с другим последним расширением.

Нюанс. Пустая строка удаляет расширение; никаких операций с файлом не происходит.

Официальная документация: PurePath.with_suffix
PurePath.with_segmentsМетод · Расширение классов

Создаёт производный путь того же типа из сегментов.

Нюанс. Основное применение — перенос дополнительного состояния в подклассах PurePath.

Официальная документация: PurePath.with_segments
Path.from_uriМетод · URI

Создаёт путь из URI схемы file.

Нюанс. Неверная схема или не-абсолютный путь вызывает ValueError.

Официальная документация: Path.from_uri
Path.as_uriМетод · URI

Представляет абсолютный путь URI схемы file.

Нюанс. Относительный путь вызывает ValueError.

Официальная документация: Path.as_uri
Path.homeМетод · Синтаксис пути

Возвращает домашний каталог пользователя.

Нюанс. Если домашний каталог определить нельзя, возникает RuntimeError.

Официальная документация: Path.home
Path.expanduserМетод · Синтаксис пути

Раскрывает начальные ~ и ~user.

Нюанс. Неопределимый домашний каталог вызывает RuntimeError.

Официальная документация: Path.expanduser
Path.cwdМетод · Синтаксис пути

Возвращает текущий рабочий каталог процесса.

Нюанс. Это рабочий каталог, а не обязательно каталог файла программы.

Официальная документация: Path.cwd
Path.absoluteМетод · Синтаксис пути

Создаёт абсолютный путь относительно рабочего каталога.

Нюанс. Не нормализует .. и не разрешает символические ссылки.

Официальная документация: Path.absolute
Path.resolveМетод · Синтаксис пути

Создаёт абсолютный путь с разрешёнными ссылками и сегментами .. .

Нюанс. При strict=False отсутствующий остаток пути сохраняется без проверки существования.

Официальная документация: Path.resolve
Path.statМетод · Сведения

Получает свежие сведения о файле.

Нюанс. По умолчанию следует символическим ссылкам; follow_symlinks=False читает саму ссылку.

Официальная документация: Path.stat
Path.lstatМетод · Сведения

Получает сведения о самой символической ссылке.

Нюанс. Не переходит к целевому файлу ссылки.

Официальная документация: Path.lstat
Path.existsМетод · Проверки

Проверяет существование объекта файловой системы.

Нюанс. False также возможен при недоступности или неверном пути; причины различают через stat().

Официальная документация: Path.exists
Path.is_fileМетод · Проверки

Проверяет, является ли объект обычным файлом.

Нюанс. По умолчанию следует ссылкам; False не доказывает отсутствие объекта.

Официальная документация: Path.is_file
Path.is_dirМетод · Проверки

Проверяет, является ли объект каталогом.

Нюанс. По умолчанию следует ссылкам; недоступный путь также может дать False.

Официальная документация: Path.is_dir
Path.is_junctionМетод · Проверки

Проверяет наличие Windows junction.

Нюанс. Такой тип соединения каталогов поддерживается только в Windows.

Официальная документация: Path.is_junction
Path.is_mountМетод · Проверки

Проверяет, является ли путь точкой подключения файловой системы.

Нюанс. В Windows учитывает корни дисков, UNC-ресурсы и подключённые каталоги.

Официальная документация: Path.is_mount
Path.is_socketМетод · Проверки

Проверяет тип Unix socket.

Нюанс. Это проверка типа объекта файловой системы, а не доступности сетевого сервиса.

Официальная документация: Path.is_socket
Path.is_fifoМетод · Проверки

Проверяет тип именованного канала FIFO.

Нюанс. False также возвращается для отсутствующего или недоступного пути.

Официальная документация: Path.is_fifo
Path.is_block_deviceМетод · Проверки

Проверяет тип блочного устройства.

Нюанс. False также возвращается для отсутствующего или недоступного пути.

Официальная документация: Path.is_block_device
Path.is_char_deviceМетод · Проверки

Проверяет тип символьного устройства.

Нюанс. False также возвращается для отсутствующего или недоступного пути.

Официальная документация: Path.is_char_device
Path.samefileМетод · Проверки

Проверяет, указывают ли два пути на один файл.

Нюанс. Сравнивает файловые объекты, а не строки; недоступность может вызвать OSError.

Официальная документация: Path.samefile
Path.openМетод · Чтение и запись

Открывает файл и возвращает объект потока.

Нюанс. Поток нужно закрыть, обычно конструкцией with.

Официальная документация: Path.open
Path.read_textМетод · Чтение и запись

Читает весь файл как строку и закрывает его.

Нюанс. Весь текст загружается в память; кодировку можно задать явно.

Официальная документация: Path.read_text
Path.read_bytesМетод · Чтение и запись

Читает весь файл как bytes и закрывает его.

Нюанс. Большой файл целиком занимает память.

Официальная документация: Path.read_bytes
Path.write_textМетод · Чтение и запись

Записывает строку в файл и закрывает его.

Нюанс. Существующий файл перезаписывается; возвращает число записанных символов.

Официальная документация: Path.write_text
Path.write_bytesМетод · Чтение и запись

Записывает bytes в файл и закрывает его.

Нюанс. Существующий файл перезаписывается; возвращает число записанных байтов.

Официальная документация: Path.write_bytes
Path.iterdirМетод · Обход

Перебирает непосредственные дочерние пути каталога.

Нюанс. Порядок не гарантируется; это не рекурсивный обход.

Официальная документация: Path.iterdir
Path.globМетод · Обход

Перебирает пути по glob-шаблону внутри каталога.

Нюанс. Возвращает объекты любого типа и не гарантирует порядок; для рекурсии применяют **.

Официальная документация: Path.glob
Path.rglobМетод · Обход

Рекурсивно перебирает пути по glob-шаблону.

Нюанс. Ошибки сканирования OSError подавляются, поэтому результат может быть неполным.

Официальная документация: Path.rglob
Path.walkМетод · Обход

Перебирает дерево каталогов с именами каталогов и файлов.

Нюанс. По умолчанию не следует ссылкам; follow_symlinks=True способен привести к циклическому обходу.

Официальная документация: Path.walk
Path.touchМетод · Создание

Создаёт файл либо обновляет его время изменения.

Нюанс. Существующий файл с exist_ok=True не обнуляется; exist_ok=False вызывает FileExistsError.

Официальная документация: Path.touch
Path.mkdirМетод · Создание

Создаёт каталог и при необходимости недостающих родителей.

Нюанс. parents и exist_ok по умолчанию выключены; в 3.15 появился отдельный parent_mode.

Официальная документация: Path.mkdir
Path.copyМетод · Копирование и перемещение

Копирует файл или дерево каталогов в target.

Нюанс. По умолчанию не гарантирует сохранение всех метаданных; существующий целевой файл может быть заменён.

Официальная документация: Path.copy
Path.copy_intoМетод · Копирование и перемещение

Копирует файл или дерево внутрь существующего каталога.

Нюанс. target_dir должен быть существующим каталогом; метод появился в 3.14.

Официальная документация: Path.copy_into
Path.renameМетод · Копирование и перемещение

Переименовывает файл или каталог и возвращает новый путь.

Нюанс. При существующей цели Unix и Windows ведут себя по-разному; относительная цель считается от cwd.

Официальная документация: Path.rename
Path.replaceМетод · Копирование и перемещение

Переименовывает объект с заменой допустимой существующей цели.

Нюанс. Существующий файл или пустой каталог заменяется; относительная цель считается от cwd.

Официальная документация: Path.replace
Path.moveМетод · Копирование и перемещение

Перемещает файл или дерево каталогов в target.

Нюанс. Между файловыми системами выполняется копирование с удалением; операция не становится атомарной.

Официальная документация: Path.move
Path.move_intoМетод · Копирование и перемещение

Перемещает файл или дерево внутрь существующего каталога.

Нюанс. target_dir должен быть существующим каталогом; метод появился в 3.14.

Официальная документация: Path.move_into
Path.rmdirМетод · Удаление

Удаляет каталог.

Нюанс. Каталог должен быть пустым.

Официальная документация: Path.rmdir
Path.ownerМетод · Права

Возвращает имя владельца файла.

Нюанс. Без модуля pwd операция не поддерживается; это существенно для Windows.

Официальная документация: Path.owner
Path.groupМетод · Права

Возвращает имя группы владельца файла.

Нюанс. Без модуля grp операция не поддерживается; это существенно для Windows.

Официальная документация: Path.group
Path.chmodМетод · Права

Меняет режим и права файла.

Нюанс. По умолчанию следует ссылкам; поддержка отдельных прав зависит от платформы.

Официальная документация: Path.chmod
Path.lchmodМетод · Права

Меняет права самой символической ссылки.

Нюанс. Поддержка изменения прав ссылок зависит от платформы.

Официальная документация: Path.lchmod
PurePath.partsСвойство · Свойства

Возвращает кортеж компонентов пути.

Нюанс. Диск и корень Windows объединены в первый компонент.

Официальная документация: PurePath.parts
PurePath.parserСвойство · Свойства

Даёт модуль разбора пути posixpath или ntpath.

Нюанс. Выбор определяется видом пути, а не содержимым файловой системы.

Официальная документация: PurePath.parser
PurePath.driveСвойство · Свойства

Возвращает диск или UNC-ресурс.

Нюанс. У POSIX-пути и некоторых Windows-путей строка пуста.

Официальная документация: PurePath.drive
PurePath.rootСвойство · Свойства

Возвращает корневой компонент пути.

Нюанс. У Windows-пути C:folder корень отсутствует.

Официальная документация: PurePath.root
PurePath.anchorСвойство · Свойства

Возвращает объединение drive и root.

Нюанс. Непустой anchor сам по себе не гарантирует абсолютность Windows-пути.

Официальная документация: PurePath.anchor
PurePath.parentsСвойство · Свойства

Даёт последовательность лексических родительских путей.

Нюанс. Не разрешает ссылки; поддерживает срезы и отрицательные индексы.

Официальная документация: PurePath.parents
PurePath.parentСвойство · Свойства

Возвращает непосредственный лексический родительский путь.

Нюанс. На корне или пустом пути не поднимается выше; .. предварительно не устраняется.

Официальная документация: PurePath.parent
PurePath.nameСвойство · Свойства

Возвращает последний компонент без диска и корня.

Нюанс. У корня или самого UNC-ресурса может быть пустым.

Официальная документация: PurePath.name
PurePath.suffixСвойство · Свойства

Возвращает последнее расширение с точкой.

Нюанс. Для archive.tar.gz это .gz; одиночная точка считается расширением с 3.14.

Официальная документация: PurePath.suffix
PurePath.suffixesСвойство · Свойства

Возвращает список расширений имени.

Нюанс. Для archive.tar.gz это ['.tar', '.gz'], а не одно целое расширение.

Официальная документация: PurePath.suffixes
PurePath.stemСвойство · Свойства

Возвращает последнее имя без последнего расширения.

Нюанс. У archive.tar.gz это archive.tar.

Официальная документация: PurePath.stem
Path.infoСвойство · Свойства

Предоставляет объект кешируемых проверок типа файла.

Нюанс. Кеш может устареть; для свежей проверки используют Path.exists()/is_file()/is_dir().

Официальная документация: Path.info

Методы и свойства Методы объекта Path.info

Все четыре метода официального протокола pathlib.types.PathInfo, получаемого через Path.info.

PathInfo.existsМетод · Кешируемые проверки

Проверяет существование через объект Path.info.

Нюанс. Результат может быть кеширован; follow_symlinks=False проверяет существование самой ссылки.

Официальная документация: PathInfo.exists
PathInfo.is_dirМетод · Кешируемые проверки

Проверяет тип каталога через объект Path.info.

Нюанс. Результат может быть кеширован; обновление файловой системы не обязано сбросить кеш.

Официальная документация: PathInfo.is_dir
PathInfo.is_fileМетод · Кешируемые проверки

Проверяет тип файла через объект Path.info.

Нюанс. Результат может быть кеширован; для актуальной проверки используйте Path.is_file().

Официальная документация: PathInfo.is_file

Примеры и материалы с собой

Архив содержит наши самостоятельные примеры, тестовые данные, ожидаемый результат и README. Указанные команды установки и фрагменты REPL отделены от скриптов, которые проверены запуском.

Сверено с официальной документацией 2026-10-12. Стандартная библиотека и сторонние пакеты различаются; ссылки на источники есть в каждой главе.