```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('Образец данных для записи в файл') |