```python import pathlib p = pathlib.Path(__file__) print(p) # получим путь к файлу, в котором сейчас находимся: /home/name/package/example.py ``` ``` from pathlib as Path ``` - `Path.cwd()`: Возвращает путь объекта текущей рабочей директории; - `Path.home()`: Возвращает путь объекта домашней директории; - `Path.stat()`: Возвращает информацию о пути; - `Path.chmod()`: Меняет режим и уровень доступа файла; - `Path.glob(pattern)`: Получение всех файлов которые соответствую паттерну, например `*.jpg` (все картинки) или `*.mp3` (все песни); - `Path.mkdir()`: создает новую папку по данному пути; - `Path.open()`: Открывает файл, созданный в пути; - `Path.rename()`: Переименовывает файл или директорию указанной цели; - `Path.rmdir()`: Удаляет пустую директорию; - `Path.unlink()`: Удаляет файл или символическую ссылку. ## Генерация кроссплатформенных путей в Pathlib Пути используют разные соглашения в разных операционных системах. Windows использует обратный слеш `\` между названиями папок, тогда как все другие популярные операционные системы используют прямой слеш `/`. Если вы хотите, чтобы ваш код работал, независимо от базовой ОС, вам нужно будет обрабатывать различные соглашения, характерные для базовой платформы. Модуль Pathlib упрощает работу с путями к файлам. В Pathlib можно просто передать путь или название файла объекту `Path()`, используя слеш, независимо от ОС. Pathlib занимается всем остальным. Python | | | |---|---| |1|pathlib.Path.home() / 'python' / 'samples' / 'test_me.py'| Объект `Path()` конвертирует `/` в слеш соответствующий операционной системе. `pathlib.Path` может представлять путь Windows или Posix. Кроме того, Pathlib решает многие кросс-функциональные баги, легко обрабатывая пути. ## Получение информации о пути в Pathlib Во время работы с путями зачастую требуется найти родительскую директорию файла/папки или получить символические ссылки. У класса Path есть несколько удобных для этого методов, различные части пути доступны как свойства, что включают следующее: - `drive`: [строка](https://python-scripts.com/string "Создание строки в питоне"), что представляет название жесткого диска. К примеру, `PureWindowsPath('c:/Program Files/CSV').drive` вернет `"C:"`; - `parts`: возвращает [кортеж](https://python-scripts.com/lists-tuples-dictionaries#tuple "Создать кортеж в питоне"), что дает доступ к компонентам пути; - `name`: компонент пути без директории; - `parent`: последовательность обеспечивает доступ к логическим предкам пути; - `stem`: финальный компонент пути без суффикса; - `suffix`: разрешение файла финального компонента; - `anchor`: часть пути перед директорией. `/` используется для создания дочерних путей и имитации поведения `os.path.join`; - `joinpath`: совмещает путь с предоставленными аргументами; - `match(pattern)`: возвращает `True/False`, основываясь на совпадении пути с предоставленным шаблоном поиска. Например, у нас есть данный путь `"/home/projects/pyscripts/python/sample.md"`: - `path`: — возвращает _PosixPath(‘/home/projects/pyscripts/python/sample.md’);_ - `path.parts`: — возвращает _(‘/’, ‘home’, ‘projects’, ‘pyscripts’, ‘python’);_ - `path.name`: — возвращает _‘sample.md’;_ - `path.stem`: — возвращает _‘sample’;_ - `path.suffix`: — возвращает _‘.md’;_ - `path.parent`: — возвращает _PosixPath(‘/home/projects/pyscripts/python’);_ - `path.parent.parent`: — возвращает _PosixPath(‘/home/projects/pyscripts’);_ - `path.match('*.md')`: возвращает _True;_ - `PurePosixPath('/python').joinpath('edited_version')`: возвращает _(‘home/projects/pyscripts/python/edited_version._ ## Альтернатива для модуля glob Помимо модулей `os`, `os.path` в Python также доступен модуль `glob`, что предоставляет путь связанных утилит. Функция `glob.glob` модуля `glob` используется для **нахождения файлов**, соответствующих шаблону. Python | | | |---|---| |1

2

3

4|from glob import glob

top_xlsx_files = glob('*.xlsx') # Все файлы с расширением .xlsx

all_xlsx_files = glob('**/*.xlsx', recursive=True)| Pathlib предоставляет свою реализацию `glob`: Python | | | | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | | 1

2

3

4 | from pathlib import Path

top_xlsx_files = Path.cwd().glob('*.xlsx')

all_xlsx_files = Path.cwd().rglob('*.xlsx') | Функциональность **glob** доступна с объектами `Path`. Следовательно, модуль Pathlib упрощают сложные задачи. ## Чтение и запись файлов с использованием Pathlib Следующие методы используются для выполнения основных операций, таких как **чтение и запись файлов**: - `read_text`: Файл открывается в **текстовом режиме** для чтения содержимого файла и его закрытия после чтения; - `read_bytes`: Используется для открытия файла в **бинарном режиме**, возвращения содержимого в бинарном форме и последующего закрытия файла; - `write_text`: Используется для открытия файла, записи туда текста и последующего закрытия; - `write_bytes`: Используется для записи бинарных данных в файл и закрытия файла по завершении процесса. Давайте испытаем модуль Pathlib используя популярные файловые операции. Следующий пример используется для **чтения содержимого файла**: Python | | | |---|---| |1

2|path = pathlib.Path.cwd() / 'Pathlib.md'

path.read_text()| Метод `read_text()` для объекта `Path` используется для чтения содержимого файла. В примере ниже данные записываются в файл, в текстовом режиме: Python | | | | ---------------------------- | -------------------------------------------------------------------------------------------------------------------- | | 1

2

3

4 | from pathlib import Path

p = Path('sample_text_file')

p.write_text('Образец данных для записи в файл') |