Модуль pathlib python 3

Pathlib — манипуляция путями, создание и удаление папок и файлов

Pathlib на примерах Python 3

Модуль Pathlib в Python упрощает работу с файлами и папками. Он доступен в Python 3.4 и более поздних версиях. Pathlib сочетает в себе лучшее из модулей файловой системы Python — os, os.path, glob и так далее.

В Python большинство скриптов предполагает работу с файловыми системами. Следовательно, неизбежно взаимодействие с названиями файлов и путями. Именно для этого в Python есть модуль Pathlib, который содержит полезные функции для выполнения задач, связанных с файлами. Pathlib предоставляет удобный для чтения и простой способ создания путей, представляя пути файловой системы в виде надлежащих объектов. Модуль позволяет создавать код, который можно переносить между платформами.

В данной статье мы подробно изучим модуль Pathlib с помощью различных примеров.

Концепт пути и директории в Python

Перед началом подробного рассмотрения модуля Pathlib важно разобраться в разнице между главными концептами темы — путем (path) и директорией (directory).

  • Путь используется для идентификации файла. Путь предоставляет необязательную последовательность названий директорий, в конце которой значится конечное имя файла, а также его расширение;
  • Расширение названия файла предоставляет некоторую информацию о формате/содержимом файла. Модуль Pathlib может работать как с абсолютными, так и с относительными путями;
  • Абсолютный путь начинается с корневой директории и определяет полное дерево каталогов;
  • Относительный путь, как следует из названия, является путем к файлу относительно другого файла или директории, обычно текущей;
  • Директория представляет собой запись пути в файловой системе и включает название файла, время создания, размер, владельца и так далее.
Читайте также:  Kinopanda tv 2935 besstydniki 2 sezon html

Модуль Pathlib в Python занимается задачами, связанными с путями, такими как создание новых путей из названий файлов и других путей, проверка различных свойств путей, создание файлов и папок по определенным путям.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Источник

Использование модуля pathlib для манипуляции путями файловых систем в Python 3

Использование модуля pathlib для манипуляции путями файловых систем в Python 3

Python 3 включает модуль pathlib для манипуляции путями файловых систем независимо от операционной системы. pathlib похож на модуль os.path , но pathlib предлагает более развитый и удобный интерфейс по сравнению с os.path .

Мы можем идентифицировать файлы на компьютере с помощью иерархических путей. Например, мы можем идентифицировать файл wave.txt на компьютере с помощью этого пути: /Users/ sammy /ocean/wave.txt . Операционные системы представляют пути несколько по-разному. Windows может представлять путь к файлу wave.txt как C:\Users\ sammy \ocean\wave.txt .

Модуль pathlib может быть полезен, если в программе Python вы создаете или перемещаете файлы в файловой системе, указывая все файлы в файловой системе, совпадающие с данным расширением или шаблоном, или создаете пути файла, соответствующие файловой системе на основе наборов неформатированных строк. Хотя вы можете использовать другие инструменты, например модуль os.path , для выполнения большей части этих задач, модуль pathlib позволяет выполнять эти операции с большей степенью читаемости и минимальным количеством кодов.

В этом обучающем модуле мы рассмотрим некоторые способы использования модуля pathlib для представления и манипуляции путями файловых систем.

Предварительные требования

Чтобы получить максимум знаний из этого обучающего модуля, рекомендуется иметь небольшое представление о программировании на Python 3. Дополнительную информацию можно найти в следующих обучающих руководствах:

Построение экземпляров Path

Модуль pathlib предоставляет несколько классов, но одним из наиболее важных является класс Path . Экземпляры класса Path представляют путь к файлу или каталогу в файловой системе вашего компьютера.

Например, следующий код инстанциирует экземпляр Path , который представляет часть пути к файлу wave.txt :

from pathlib import Path wave = Path("ocean", "wave.txt") print(wave) 

Если запустить этот код, результат будет выглядеть следующим образом:

from pathlib import Path делает класс Path доступным для нашей программы. Затем Path(«ocean», «wave.txt») инстанциирует новый экземпляр Path . Вывод отображает, что Python добавил соответствующий разделитель оперативной системы / между двумя заданными нами компонентами пути «ocean» и «wave.txt» .

Примечание. В зависимости от операционной системы вывод может немного отличаться от примеров, приведенных в данном руководстве. Если вы работаете в Windows, например, ваш вывод для этого первого примера может выглядеть как ocean\wave.txt .

В настоящее время объект Path , назначенный на переменную wave , содержит относительный путь. Другими словами, ocean/wave.txt может существовать в нескольких местах в нашей файловой системе. В качестве примера он может существовать в /Users/ user_1 /ocean/wave.txt или /Users/ user_2 /research/ocean/wave.txt , но мы не указали к какому из них конкретно мы обращаемся. Абсолютный путь, напротив, однозначно четко указывает на расположение в файловой системе.

Вы можете использовать Path.home() для получения абсолютного пути к домашнему каталогу текущего пользователя:

home = Path.home() wave_absolute = Path(home, "ocean", "wave.txt") print(home) print(wave_absolute) 

Если запустить этот код, результат будет выглядеть приблизительно следующим образом:

Output
/Users/sammy /Users/sammy/ocean/wave.txt

Примечание. Как упоминалось ранее, вывод будет зависеть от операционной системы. Ваш домашний каталог также будет отличаться от /Users/ sammy .

Path.home() возвращает экземпляр Path с абсолютным путем в домашний каталог текущего пользователя. Затем мы передадим этот экземпляр Path и строки «ocean» и «wave.txt» в другой конструктор Path , чтобы создать абсолютный путь к файлу wave.txt . Вывод показывает, что первая строка — это домашний каталог, а вторая строка — домашний каталог плюс ocean/wave.txt .

Этот пример также иллюстрирует важную функцию класса Path : конструктор Path принимает обе строки и ранее существовавшие объекты Path .

Давайте более детально рассмотрим поддержку строк и объектов Path в конструкторе Path :

shark = Path(Path.home(), "ocean", "animals", Path("fish", "shark.txt")) print(shark) 

Если запустить этот код Python, результат будет выглядеть следующим образом:

Output
/Users/sammy/ocean/animals/fish/shark.txt

shark — это Path к файлу, который мы создали с помощью объектов Path ( Path.home() и Path(«fish», «shark.txt») и строк «ocean» и «animals» ). Конструктор Path интеллектуально обрабатывает оба типа объектов и аккуратно соединяет их с помощью соответствующего разделителя операционной системы, в данном случае / .

Доступ к атрибутам файла

Теперь, когда мы узнали, как создать экземпляры Path , давайте рассмотрим, как можно использовать эти экземпляры для доступа к информации о файле.

Мы можем использовать атрибуты name и suffix для доступа к именам и расширениям файлов:

wave = Path("ocean", "wave.txt") print(wave) print(wave.name) print(wave.suffix) 

Запустив этот код, мы получим вывод, аналогичный следующему:

Output
/Users/sammy/ocean/wave.txt wave.txt .txt

Этот вывод показывает, что имя файла в конце нашего пути — wave.txt , а расширение файла — .txt .

Экземпляры Path также предлагают функцию with_name , позволяющую беспрепятственно создавать новый объект Path с другим именем:

wave = Path("ocean", "wave.txt") tides = wave.with_name("tides.txt") print(wave) print(tides) 

Если запустить его, результат будет выглядеть следующим образом:

ocean/wave.txt ocean/tides.txt 

Код сначала создает экземпляр Path , указывающий на файл с именем wave.txt . Затем мы вызовем метод with_name в wave , чтобы вернуть второй экземпляр Path , указывающий на новый файл с именем tides.txt . Часть каталога ocean/ остается неизмененной и оставляет финальный путь в виде ocean/tides.txt

Доступ к предшествующим объектам

Иногда полезно получить доступ к каталогам, содержащим определенный путь. Давайте рассмотрим пример:

shark = Path("ocean", "animals", "fish", "shark.txt") print(shark) print(shark.parent) 

Если запустить этот код, результат будет выглядеть следующим образом:

Output
ocean/animals/fish/shark.txt ocean/animals/fish

Атрибут parent в экземпляре Path возвращает ближайшего предшественника пути данного файла. В этом случае он возвращает каталог с файлом shark.txt : ocean/animals/fish .

Мы можем получать доступ к атрибуту parent несколько раз в строке, чтобы пройти вверх по корневому дереву данного файла:

shark = Path("ocean", "animals", "fish", "shark.txt") print(shark) print(shark.parent.parent) 

Если мы выполним этот код, мы увидим следующие результаты:

Output
ocean/animals/fish/shark.txt ocean/animals

Вывод будет похож на предыдущий вывод, но теперь мы перешли на уровень выше, получив доступ к .parent во второй раз. Два каталога от shark.txt — это каталог ocean/animals .

Использование шаблона поиска для списка файлов

Также можно использовать класс Path для списка файлов с помощью метода glob .

Допустим, у нас есть структура каталога, которая выглядит следующим образом:

└── ocean ├── animals │ └── fish │ └── shark.txt ├── tides.txt └── wave.txt 

Каталог ocean содержит файлы tides.txt и wave.txt . У нас есть файл с именем shark.txt , вложенный в каталог ocean , каталог animals и каталог fish : ocean/animals/fish .

Чтобы перечислить все файлы .txt в каталоге ocean , можно сказать:

for txt_path in Path("ocean").glob("*.txt"): print(txt_path) 

Этот код произведет следующий вывод:

Output
ocean/wave.txt ocean/tides.txt

Шаблон поиска «*.txt» находит все файлы, заканчивающиеся на .txt . Поскольку пример кода выполняет этот поиск в каталоге ocean , он возвращает два файла .txt в каталоге ocean : wave.txt и tides.txt .

Примечание. Если вы хотите дублировать выводы, указанные в данном примере, вам потребуется имитировать структуру каталога, изображенную здесь, на компьютере.

Также мы можем использовать метод glob рекурсивно. Чтобы перечислить все файлы .txt в каталоге ocean и все его подкаталоги, мы можем сказать:

for txt_path in Path("ocean").glob("**/*.txt"): print(txt_path) 

Если запустить этот код, результат будет выглядеть следующим образом:

Output
ocean/wave.txt ocean/tides.txt ocean/animals/fish/shark.txt

Часть ** шаблона поиска будет соответствовать этому каталогу и всем каталогам под ним рекурсивно. Поэтому в выводе у нас будут не только файлы wave.txt и tides.txt , но также мы получим файл shark.txt , вложенный в ocean/animals/fish .

Вычисление относительных путей

Мы можем использовать метод Path.relative_to для вычисления путей, относящихся друг к другу. Метод relative_to полезен, если, например, вы хотите получить часть длинного пути файла.

Рассмотрите следующий код:

shark = Path("ocean", "animals", "fish", "shark.txt") below_ocean = shark.relative_to(Path("ocean")) below_animals = shark.relative_to(Path("ocean", "animals")) print(shark) print(below_ocean) print(below_animals) 

Если запустить его, результат будет выглядеть следующим образом:

Output
ocean/animals/fish/shark.txt animals/fish/shark.txt fish/shark.txt

Метод relative_to возвращает новый объект Path , относящийся к данному аргументу. В нашем примере мы вычислим Path к shark.txt , относящийся к каталогу ocean , а затем относящийся к обоим каталогам ocean и animals .

Если relative_to не сможет вычислить ответ, поскольку мы даем ему не связанный путь, он выдаст ValueError :

shark = Path("ocean", "animals", "fish", "shark.txt") shark.relative_to(Path("unrelated", "path")) 

Мы получим исключение ValueError , возникшее из этого кода, которое будет выглядеть следующим образом:

Output
Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/Python3.8/pathlib.py", line 899, in relative_to raise ValueError(" does not start with " ValueError: 'ocean/animals/fish/shark.txt' does not start with 'unrelated/path'

unrelated/path не является частью ocean/animals/fish/shark.txt , поэтому Python не сможет вычислить относительный путь.

Заключение

Модуль pathlib — это мощная часть стандартной библиотеки Python, которая позволяет нам быстро манипулировать путями файловых систем в любой операционной системе. В этом обучающем модуле мы научились использовать некоторые ключевые утилиты pathlib для доступа к атрибутам файла, спискам файлов с помощью шаблонов поиска и переходить к родительским файлам и каталогам.

Модуль pathlib представляет дополнительные классы и утилиты, которые мы не охватили в данном руководстве. После получения базового уровня вы можете использовать документацию модуля pathlib для получения дополнительной информации о других имеющихся классов и утилитах.

Если вас интересуют другие библиотеки Python, ознакомьтесь со следующими обучающими модулями:

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Источник

Оцените статью