pathlib — современный способ работы с путями файловой системы вместо строк.
Создание пути
from pathlib import Path
# Текущая директория
cwd = Path.cwd()
# Домашняя директория
home = Path.home()
# Из строки
p = Path('/Users/dmitrii/projects/myapp')
p = Path('src/tasks/models.py')
# BASE_DIR в Django
BASE_DIR = Path(__file__).resolve().parent.parent
Навигация по файловой системе
p = Path('/home/user/projects/myapp/src/models.py')
p.name # 'models.py'
p.stem # 'models'
p.suffix # '.py'
p.parent # /home/user/projects/myapp/src
p.parents[0] # /home/user/projects/myapp/src
p.parents[1] # /home/user/projects/myapp
# Объединение путей
data = BASE_DIR / 'data' / 'output.csv'
Чтение и запись
p = Path('data.txt')
# Чтение
text = p.read_text(encoding='utf-8')
data = p.read_bytes()
# Запись
p.write_text('Hello, World!', encoding='utf-8')
p.write_bytes(b'\x00\x01')
Проверки
p = Path('config.json')
p.exists() # существует?
p.is_file() # это файл?
p.is_dir() # это директория?
p.is_absolute() # абсолютный путь?
Создание и удаление
# Создать директорию
Path('logs').mkdir(exist_ok=True)
Path('a/b/c').mkdir(parents=True, exist_ok=True)
# Удалить файл
Path('temp.txt').unlink(missing_ok=True)
# Удалить пустую директорию
Path('empty_dir').rmdir()
Обход директории
# Все файлы
for f in Path('src').iterdir():
print(f)
# По паттерну
for py_file in Path('src').glob('**/*.py'):
print(py_file)
# Все Python файлы рекурсивно
list(Path('.').rglob('*.py'))
Конвертация
p = Path('/home/user/file.txt')
str(p) # '/home/user/file.txt'
p.as_posix() # '/home/user/file.txt'
# В os.path
import os
os.path.exists(p) # Path работает везде где нужна строка
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!