summaryrefslogtreecommitdiff
path: root/PYTHON/PATH.md
diff options
context:
space:
mode:
Diffstat (limited to 'PYTHON/PATH.md')
-rw-r--r--PYTHON/PATH.md111
1 files changed, 111 insertions, 0 deletions
diff --git a/PYTHON/PATH.md b/PYTHON/PATH.md
new file mode 100644
index 0000000..6eaa7c7
--- /dev/null
+++ b/PYTHON/PATH.md
@@ -0,0 +1,111 @@
+```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<br><br>2<br><br>3<br><br>4|from glob import glob<br><br>top_xlsx_files = glob('*.xlsx') # Все файлы с расширением .xlsx<br><br>all_xlsx_files = glob('**/*.xlsx', recursive=True)|
+
+Pathlib предоставляет свою реализацию `glob`:
+
+Python
+
+| | |
+| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| 1<br><br>2<br><br>3<br><br>4 | from pathlib import Path<br><br>top_xlsx_files = Path.cwd().glob('*.xlsx')<br><br>all_xlsx_files = Path.cwd().rglob('*.xlsx') |
+
+Функциональность **glob** доступна с объектами `Path`. Следовательно, модуль Pathlib упрощают сложные задачи.
+
+## Чтение и запись файлов с использованием Pathlib
+
+Следующие методы используются для выполнения основных операций, таких как **чтение и запись файлов**:
+
+- `read_text`: Файл открывается в **текстовом режиме** для чтения содержимого файла и его закрытия после чтения;
+- `read_bytes`: Используется для открытия файла в **бинарном режиме**, возвращения содержимого в бинарном форме и последующего закрытия файла;
+- `write_text`: Используется для открытия файла, записи туда текста и последующего закрытия;
+- `write_bytes`: Используется для записи бинарных данных в файл и закрытия файла по завершении процесса.
+
+Давайте испытаем модуль Pathlib используя популярные файловые операции. Следующий пример используется для **чтения содержимого файла**:
+
+Python
+
+| | |
+|---|---|
+|1<br><br>2|path = pathlib.Path.cwd() / 'Pathlib.md'<br><br>path.read_text()|
+
+Метод `read_text()` для объекта `Path` используется для чтения содержимого файла. В примере ниже данные записываются в файл, в текстовом режиме:
+
+Python
+
+| | |
+| ---------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| 1<br><br>2<br><br>3<br><br>4 | from pathlib import Path<br><br>p = Path('sample_text_file')<br><br>p.write_text('Образец данных для записи в файл') | \ No newline at end of file