from pathlib import Path
# Создание пути (работает одинаково на всех ОС)
path = Path("folder/subfolder/file.txt")
# Автоматическое преобразование в нужный формат
print(path) # Windows: folder\subfolder\file.txt; Linux/macOS: folder/subfolder/file.txt
# Использование оператора `/` для объединения путей (кросс-платформенно)
new_path = Path("/home") / "user" / "documents"
print(new_path) # Windows: \home\user\documents; Linux/macOS: /home/user/documents
# Проверка существования файла
if path.exists():
print("Файл существует")
`pathlib` обеспечивает кросс-платформенную работу с путями, избавляя от необходимости использовать условные операторы для разных ОС.
Использование pathlib
позволяет абстрагироваться от специфики работы с путями в разных операционных системах, делая код более переносимым. pathlib
предоставляет объектно-ориентированный интерфейс для работы с путями, который автоматически адаптируется к операционной системе.
Основные принципы и примеры:
1. Создание объектов Path:
from pathlib import Path
# Создание объекта Path для текущей директории
current_dir = Path('.')
# Создание объекта Path для абсолютного пути
absolute_path = Path('/home/user/documents') # Linux пример
absolute_path_windows = Path('C:/Users/User/Documents') # Windows пример (прямой слэш)
# Автоматическая нормализация:
path1 = Path('my_folder/../new_folder') #Относительный путь
print(path1.resolve()) #Вывод текущий путь до папки проекта/new_folder (Linux) или аналогичный (Windows)
2. Объединение путей:
Использование оператора /
для объединения путей. pathlib
автоматически выбирает правильный разделитель (/
для Linux, \
для Windows).
from pathlib import Path
project_dir = Path('/home/user/my_project') # Linux пример
config_file = project_dir / 'config' / 'settings.ini'
project_dir_win = Path('C:/Users/User/MyProject') #Windows пример
config_file_win = project_dir_win / 'config' / 'settings.ini'
print(config_file) # Вывод /home/user/my_project/config/settings.ini
print(config_file_win) # Вывод C:\Users\User\MyProject\config\settings.ini (или / в зависимости от системы)
3. Проверка существования и типа файла/директории:
from pathlib import Path
file_path = Path('my_file.txt')
if file_path.exists():
if file_path.is_file():
print('Это файл')
elif file_path.is_dir():
print('Это директория')
else:
print('Файл/директория не существует')
4. Работа с атрибутами пути:
from pathlib import Path
file_path = Path('/home/user/my_file.txt')
print(file_path.name) # Имя файла (my_file.txt)
print(file_path.stem) # Имя файла без расширения (my_file)
print(file_path.suffix) # Расширение файла (.txt)
print(file_path.parent) # Родительская директория (/home/user)
print(file_path.absolute()) # абсолютный путь
5. Создание директорий:
from pathlib import Path
new_dir = Path('new_directory')
new_dir.mkdir(exist_ok=True) # Создает директорию, если она не существует. exist_ok избегает исключения, если директория существует.
new_dir_with_parents = Path('parent_dir/child_dir')
new_dir_with_parents.mkdir(parents=True, exist_ok=True) # Создает все родительские директории
6. Итерация по директории:
from pathlib import Path
dir_path = Path('.')
for item in dir_path.iterdir():
if item.is_file():
print(f'Файл: {item}')
elif item.is_dir():
print(f'Директория: {item}')
7. Глоббинг (поиск файлов по маске):
from pathlib import Path
dir_path = Path('.')
for py_file in dir_path.glob('*.py'):
print(f'Python файл: {py_file}')
for all_files in dir_path.rglob('*'): #рекурсивный поиск
print(f"Файл (рекурсивно): {all_files}")
Ключевые преимущества `pathlib` для кроссплатформенной работы:
pathlib
абстрагирует детали файловой системы, предоставляя единый интерфейс для разных ОС./
или \
) в зависимости от операционной системы.В заключение, pathlib
значительно упрощает работу с путями в Python, делая код более переносимым и читабельным, поскольку избавляет от необходимости вручную обрабатывать различия в представлении путей в разных операционных системах. Это особенно важно при разработке кроссплатформенных приложений.