- Модуль pathlib в Python
- Path Class
- 1. Список подкаталогов и файлов внутри каталога
- 2. Список файлов определенного типа
- 3. Устранение символических ссылок на канонический путь
- 4. Проверьте, существует ли файл или каталог
- 5. Открытие и чтение содержимого файла
- 6. Получение информации о файле
- 7. Получение имени файла или каталога
- 8. Создание и удаление каталога
- 9. Изменить режим файла
- 10. Получение файловой группы и имени владельца
- 11. Разверните ~ до канонического пути
- 12. CWD и домашний путь
- 13. Соединение двух путей
- 14. Создание пустого файла
- Заключение
Модуль pathlib в Python
Модуль pathlib в Python обеспечивает объектно-ориентированный подход к работе с файлами и каталогами. В модуле pathlib есть классы для работы, как в среде Unix, так и в среде Windows. Самое приятное то, что нам не нужно беспокоиться о базовой операционной системе, модуль pathlib заботится об использовании соответствующего класса в зависимости от операционной системы.
Path Class
Path – самый важный класс в модуле pathlib. Это точка входа для всех функций, предоставляемых модулем pathlib. Он заботится о создании экземпляра реализации конкретного пути на основе операционной системы и делает код независимым от платформы.
Давайте рассмотрим несколько примеров использования модуля pathlib.
1. Список подкаталогов и файлов внутри каталога
Мы можем использовать функцию Path iterdir() для перебора файлов в каталоге. Затем мы можем использовать функцию is_dir(), чтобы различать файл и каталог.
from pathlib import Path # list subdirectories and files inside a directory path = Path("/Users/pankaj/temp") subdirs = [] files = [] for x in path.iterdir(): # iterate over the files in the path if x.is_dir(): # condition to check if the file is a directory subdirs.append(x) else: files.append(x) print(subdirs) print(files)
[PosixPath('/Users/pankaj/temp/spring-webflow-samples'), PosixPath('/Users/pankaj/temp/image-optim'), PosixPath('/Users/pankaj/temp/jersey2-example')] [PosixPath('/Users/pankaj/temp/test123.py'), PosixPath('/Users/pankaj/temp/.txt'), PosixPath('/Users/pankaj/temp/xyz.txt'), PosixPath('/Users/pankaj/temp/.DS_Store'), PosixPath('/Users/pankaj/temp/db.json'), PosixPath('/Users/pankaj/temp/Test.java'), PosixPath('/Users/pankaj/temp/routes.json'), PosixPath('/Users/pankaj/temp/itertools.py')]
Если вы запустите ту же программу в Windows, вы получите экземпляры WindowsPath.
2. Список файлов определенного типа
Мы можем использовать функцию Path glob() для перебора списка файлов, соответствующих заданному шаблону. Давайте воспользуемся этой функцией, чтобы распечатать все сценарии Python внутри каталога.
from pathlib import Path path = Path("/Users/pankaj/temp") python_files = path.glob('**/*.py') for pf in python_files: print(pf)
3. Устранение символических ссылок на канонический путь
Мы можем использовать функцию resolve() для преобразования символических ссылок в их канонические пути.
py2_path = Path("/usr/bin/python2.7") print(py2_path) print(py2_path.resolve())
/usr/bin/python2.7 /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
4. Проверьте, существует ли файл или каталог
Функция Path exists() возвращает True, если путь существует, в противном случае возвращает False.
path = Path("/Users/pankaj/temp") print(path.exists()) # True path = Path("/Users/pankaj/temp/random1234") print(path.exists()) # False
5. Открытие и чтение содержимого файла
Мы можем использовать функцию Path open(), чтобы открыть файл. Он возвращает файловый объект, такой как встроенная функция open().
file_path = Path("/Users/pankaj/temp/test.py") if file_path.exists() and file_path.is_file(): with file_path.open() as f: print(f.readlines())
['import os\n', '\n', 'print("Hello World")\n']
6. Получение информации о файле
Функция stat() объекта Path выполняет системный вызов stat() и возвращает результаты. Вывод такой же, как у функции stat() модуля os.
file_path = Path("/Users/pankaj/temp/test.py") print(file_path.stat())
os.stat_result(st_mode=33188, st_ino=8623963104, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=32, st_atime=1566476310, st_mtime=1566476242, st_ctime=1566476242)
7. Получение имени файла или каталога
Мы можем использовать свойство «name», чтобы получить имя файла из объекта пути.
print(Path("/Users/pankaj/temp/test.py").name) print(Path("/Users/pankaj/temp/").name) print("Path without argument Name :", Path().name)
test.py temp Path without argument Name :
8. Создание и удаление каталога
Мы можем использовать функцию mkdir() для создания каталога. Мы можем использовать rmdir() для удаления пустого каталога. Если есть файлы, то мы должны сначала удалить их, а затем удалить каталог.
directory = Path("/Users/pankaj/temp/temp_dir") print(directory.exists()) # False directory.mkdir() print(directory.exists()) # True directory.rmdir() print(directory.exists()) # False
9. Изменить режим файла
file = Path("/Users/pankaj/temp/test.py") file.chmod(0o777)
Функция chmod() ведет себя так же, как функция os.chmod() для изменения прав доступа к файлу.
10. Получение файловой группы и имени владельца
file = Path("/Users/pankaj/temp/test.py") print(file.group()) # staff print(file.owner()) # pankaj
11. Разверните ~ до канонического пути
path = Path("~/temp") print(path) # ~/temp path = path.expanduser() print(path) # /Users/pankaj/temp
12. CWD и домашний путь
print(Path.cwd()) print(Path.home())
/Users/pankaj/Documents/PycharmProjects/PythonTutorials/hello-world /Users/pankaj
13. Соединение двух путей
path = Path.home() path = path.joinpath(Path("temp")) print(path) # /Users/pankaj/temp
14. Создание пустого файла
Как и в команде Touch в Unix, в Path есть функция touch() для создания пустого файла. У вас должны быть разрешения на создание файла. В противном случае файл не будет создан и ошибки не возникнет.
new_file = Path("/Users/pankaj/temp/xyz.txt") print(new_file.exists()) # False new_file.touch() print(new_file.exists()) # True
Заключение
Модуль pathlib в Python очень полезен при объектно-ориентированной работе с файлами и каталогами. Слабосвязанный и независимый от платформы код делает его более привлекательным в использовании.