Pathlib库:Python面向对象的文件路径处理(一)

简介: Pathlib库:Python面向对象的文件路径处理(一)

前言


Pathlib库提供了一个面向对象的API来解析,建立,测试和处理文件名和路径,而不是使用底层字符串操作


其中Pathlib库有2个非常关键的类名:PurePosixPath,PureWindowsPath。它们可以在任意操作系统上实例化和使用,因为它们只处理文件名与目录名。


要实例化一个具体的类来处理真正的文件系统,需要使用Path得到一个PosixPath或WindowsPath,至于取哪个,取决于你是什么系统。


建立路径


下面,我们来通过Pathlib库建立路径。示例如下:

import pathlib
users = pathlib.PurePosixPath('/Users')
print(users)
users_liyuanjing = users / 'liyuanjinglyj'
print(users_liyuanjing)
users_yellow = users / pathlib.PurePosixPath('yellow')
print(users_yellow)
users_etc = users / '/ect/'
print(users_etc)


运行之后,效果如下:

如上面代码所示,我们通过PurePosixPath实例化一个新路径,新路径的对象表示的就是这个字符串的值。


而像之前使用os.path.join()组合路径,这里可以直接使用"/"符号进行拼接,即可以拼接字符串,也可以在拼接一个新路径的PurePosixPath对象。不过,有一点和os.path.join()一样,就是组合路径中,一旦后面也有“/”符号,那么就会舍弃前面的路径,比如最后的/etc路径。


joinPath()


既然提到了os.path.join()函数,我们就先来介绍一个Pathlib库中很像它的函数:joinPath()。它也是用于拼接路径的,具体示例如下:

import pathlib
users = pathlib.PurePosixPath()
paths = ['liyuanjinglyj', 'yellow']
result = users.joinpath(*paths)
print(result)


运行之后,效果如下:


路径格式化


既然是字符串路径,那么拼接的时候,肯定会有不规范的地方。所以,我们需要使用resolve()函数进行字符串路径规范化,示例如下:

import pathlib
users = pathlib.Path()
result = users / '..' / 'liyuanjing'
print(result.resolve())
users = pathlib.Path('/Users/local')
result = users / '..' / 'liyuanjing'
print(result.resolve())


运行之后,效果如下:


如上图所示,它会自动格式化路径,同时转化为绝对路径。


with_name()与with_suffix()


with_name():创建一个新路径,将一个路径中的文件名替换成为另一个不同的文件名。


with_suffix():创建一个新路径,将文件名的扩展名替换为一个不同的值。


示例如下:

import pathlib
one = pathlib.PurePosixPath('/base_demo/demo.py')
print(one)
two = one.with_name("yellow.py")
print(two)
three = two.with_suffix(".pyc")
print(three)


运行之后,效果如下:


如上图所示,with_name将文件名demo替换成了yellow。而with_suffix将文件名后缀py替换成了pyc。


解析路径


既然有组合路径,替换路径等。那么也会有解析路径,毕竟有时候我们只想要文件名,那么就必须分解路径。


分解路径会用到PurePosixPath成员变量parts,示例如下:

import pathlib
one = pathlib.PurePosixPath('D:/Users/base_demo/demo.py')
print(one.parts)


运行之后,效果如下:


可以看到,这里将路径中的所有“/”分割的符号都分解了,最后一个肯定就是文件名或者文件(只有文件的话)。


既然这里,我们可以通过一层层的分解得到各个文件的名称,那么PurePosixPath类也肯定有层级给文件名分类,比如像获取某个文件的父目录,可以通过如下代码做到:

import pathlib
one = pathlib.PurePosixPath('D:/Users/base_demo/demo.py')
print(one.parent)
print("----------")
for name in one.parents:
    print(name)


运行之后,效果如下:


通过parents,我们可以一级一级的返回其父亲目录,直到根目录为止。


这里,还有一些成员变量在实际的应用中会经常的用到,示例如下:

import pathlib
one = pathlib.PurePosixPath('D:/Users/base_demo/demo.py')
print(one.name)
print(one.suffix)
print(one.stem)


运行之后,效果如下:

name:用于获取最后的文件名与后缀。


suffix:用于获取文件名的后缀


stem:用于获取文件名不要后缀


home()与cwd()


home():直接生成系统用户目录的路径


cwd():用于获取项目的绝对路径


示例如下:

import pathlib
one = pathlib.Path.home()
print(one)
two = pathlib.Path.cwd()
print(two)


运行之后,效果如下:

相关文章
|
2月前
|
存储 Web App开发 前端开发
Python + Requests库爬取动态Ajax分页数据
Python + Requests库爬取动态Ajax分页数据
|
1月前
|
数据采集 存储 Web App开发
Python爬虫库性能与选型实战指南:从需求到落地的全链路解析
本文深入解析Python爬虫库的性能与选型策略,涵盖需求分析、技术评估与实战案例,助你构建高效稳定的数据采集系统。
223 0
|
2月前
|
存储 监控 安全
Python剪贴板监控实战:clipboard-monitor库的深度解析与扩展应用
本文介绍如何利用Python的clipboard-monitor库实现剪贴板监控系统,涵盖文本与图片的实时监听、防重复存储、GUI界面开发及数据加密等核心技术,适用于安全审计与自动化办公场景。
84 0
|
Java 程序员 Python
python学习13-面向对象的三大特征、特殊方法和特殊属性、类的浅拷贝和深拷贝
python学习13-面向对象的三大特征、特殊方法和特殊属性、类的浅拷贝和深拷贝
|
Python
【Python零基础入门篇 · 24】:面向对象的多态、静态方法和类方法
【Python零基础入门篇 · 24】:面向对象的多态、静态方法和类方法
155 0
【Python零基础入门篇 · 24】:面向对象的多态、静态方法和类方法
29.从入门到精通:Python3 面向对象继承 多继承 方法重写 类属性与方法
29.从入门到精通:Python3 面向对象继承 多继承 方法重写 类属性与方法
28.从入门到精通:Python3 面向对象 面向对象技术简介 类定义 类对象 类的方法
28.从入门到精通:Python3 面向对象 面向对象技术简介 类定义 类对象 类的方法
|
Python
python|面向对象-5|类是如何被创建的|初探元类
python|面向对象-5|类是如何被创建的|初探元类
195 0

热门文章

最新文章

推荐镜像

更多