Работа с путями: 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.path | pathlib |
|---|---|---|
| Сборка пути | 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-файлами — таблицами с данными в текстовом формате.