Работа с путями: os.path и pathlib

Работа с путями: os.path и pathlib

Когда программа работает с файлами, нужно не только читать и писать, но и проверять существование файлов, создавать директории, строить пути. Python предоставляет два инструмента: классический os.path и современный объектно-ориентированный pathlib.

Модуль os.path

os.path — функции для работы с путями в виде строк. Работает на всех ОС: Windows, Linux, macOS:

import os

# Существование:
print(os.path.exists("notes.txt"))     # True / False
print(os.path.isfile("notes.txt"))     # True если файл
print(os.path.isdir("my_folder"))      # True если директория

# Компоненты пути:
path = "/home/alice/documents/report.txt"
print(os.path.dirname(path))    # /home/alice/documents
print(os.path.basename(path))   # report.txt
print(os.path.splitext(path))   # ('/home/alice/documents/report', '.txt')

# Сборка пути (корректно для любой ОС):
full_path = os.path.join("data", "2025", "report.txt")
print(full_path)   # data/2025/report.txt  (или data\2025\report.txt на Windows)

os.path.join() важен для переносимости: он использует правильный разделитель для каждой ОС.

Работа с директориями

import os

# Текущая директория:
print(os.getcwd())

# Создать директорию (makedirs создаёт весь путь):
os.makedirs("output/reports/2025", exist_ok=True)

# Список файлов:
files = os.listdir(".")   # файлы и папки в текущей директории
print(files)

# Удалить файл:
# os.remove("temp.txt")

exist_ok=True в makedirs — не выбрасывать ошибку, если директория уже существует.

pathlib — современный подход

Начиная с Python 3.4, рекомендуемый способ — pathlib.Path. Путь — это объект, а операции — его методы:

from pathlib import Path

p = Path("data/reports/2025")

# Проверки:
print(p.exists())      # True / False
print(p.is_file())
print(p.is_dir())

# Компоненты:
file_path = Path("/home/alice/documents/report.txt")
print(file_path.parent)    # /home/alice/documents
print(file_path.name)      # report.txt
print(file_path.stem)      # report
print(file_path.suffix)    # .txt

Сборка путей через /

pathlib.Path перегружает оператор / для сборки путей — это читаемее, чем os.path.join:

from pathlib import Path

base = Path("data")
report = base / "2025" / "report.txt"
print(report)   # data/2025/report.txt

Чтение и запись через pathlib

Path умеет читать и писать файлы напрямую:

from pathlib import Path

p = Path("notes.txt")

# Запись:
p.write_text("Привет, мир!\n", encoding="utf-8")

# Чтение:
content = p.read_text(encoding="utf-8")
print(content)

# Список файлов по шаблону:
src_dir = Path("src")
if src_dir.exists():
    for py_file in src_dir.glob("*.py"):
        print(py_file.name)

os.path vs pathlib

Задачаos.pathpathlib
Сборка путиos.path.join(a, b)Path(a) / b
Имя файлаos.path.basename(p)p.name
Расширениеos.path.splitext(p)p.suffix
Существованиеos.path.exists(p)p.exists()
Создание директорииos.makedirs(p)p.mkdir(parents=True)

Для нового кода предпочтителен pathlib — он объектно-ориентированный и более читаемый. Знание os.path нужно для чтения чужого и старого кода.

Итог

  • os.path.join(a, b) — безопасная сборка пути; os.path.exists() — проверка существования.
  • os.makedirs(path, exist_ok=True) — создание директорий.
  • pathlib.Path — современный подход; путь как объект с атрибутами и методами.
  • Path(a) / b — сборка пути через /.
  • p.read_text() / p.write_text() — чтение и запись без явного open().

В следующем уроке научимся работать с CSV-файлами — таблицами с данными в текстовом формате.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике