Python pathlib模块使用方法及实例解析


Posted in Python onOctober 05, 2020

pathlib 模块中包含的是一些类,它们的继承关系如图 1 所示。

图 1 pathlib模块中类的组织结构

Python pathlib模块使用方法及实例解析

图 1 中,箭头连接的是有继承关系的两个类,以 PurePosixPath 和 PurePath 类为例,PurePosizPath 继承自 PurePath,即前者是后者的子类。

pathlib 模块的操作对象是各种操作系统中使用的路径(例如指定文件位置的路径,包括绝对路径和相对路径)。这里简单介绍一下图 1 中包含的几个类的具体功能:

  • PurePath 类会将路径看做是一个普通的字符串,它可以实现将多个指定的字符串拼接成适用于当前操作系统的路径格式,同时还可以判断任意两个路径是否相等。注意,使用 PurePath 操作的路径,它并不会关心该路径是否真实有效。
  • PurePosixPath 和 PureWindowsPath 是 PurePath 的子类,前者用于操作 UNIX(包括 Mac OS X)风格的路径,后者用于操作 Windows 风格的路径。
  • Path 类和以上 3 个类不同,它操作的路径一定是真实有效的。Path 类提供了判断路径是否真实存在的方法。
  • PosixPath 和 WindowPath 是 Path 的子类,分别用于操作 Unix(Mac OS X)风格的路径和 Windows 风格的路径。

注意,UNIX 操作系统和 Windows 操作系统上,路径的格式是完全不同的,主要区别在于根路径和路径分隔符,UNIX 系统的根路径是斜杠(/),而 Windows 系统的根路径是盘符(C:);UNIX 系统路径使用的分隔符是斜杠(/),而 Windows 使用的是反斜杠(\)。

PurePath 类的用法

PurePath 类(以及 PurePosixPath 类和 PureWindowsPath 类)都提供了大量的构造方法、实例方法以及类实例属性,供我们使用。

PurePath类构造方法

需要注意的是,在使用 PurePath 类时,考虑到操作系统的不同,如果在 UNIX 或 Mac OS X 系统上使用 PurePath 创建对象,该类的构造方法实际返回的是 PurePosixPath 对象;反之,如果在 Windows 系统上使用 PurePath 创建对象,该类的构造方法返回的是 PureWindowsPath 对象。

当然,我们完全可以直接使用 PurePosixPath 类或者 PureWindowsPath 类创建指定操作系统使用的类对象。

例如,在 Windows 系统上执行如下语句:

from pathlib import *
# 创建PurePath,实际上使用PureWindowsPath
path = PurePath('my_file.txt')
print(type(path))

程序执行结果为:

<class 'pathlib.PureWindowsPath'>

显然,在 Windows 操作系统上,使用 PurePath 类构造函数创建的是 PureWindowsPath 类对象。

读者可自行尝试在 UNIX 或者 Mac OS X 系统上执行该程序。

除此之外,PurePath 在创建对象时,也支持传入多个路径字符串,它们会被拼接成一个路径格式的字符串。例如:

from pathlib import *
# 创建PurePath,实际上使用PureWindowsPath
path = PurePath('http:','c.biancheng.net','python')
print(path)

程序执行结果为:

http:\c.biancheng.net\python

可以看到,由于本机为 Windows 系统,因此这里输出的是适用于 Windows 平台的路径。如果想在 Windows 系统上输出 UNIX 风格的路径字符串,就需要使用 PurePosixPath 类。例如:

from pathlib import *
path = PurePosixPath('http:','c.biancheng.net','python')
print(path)

程序执行结果为:

http:/c.biancheng.net/python

值的一提的是,如果在使用 PurePath 类构造方法时,不传入任何参数,则等同于传入点‘.'(表示当前路径)作为参数。例如:

from pathlib import *
path = PurePath()
print(path)
path = PurePath('.')
print(path)

程序执行结果为:

.
.

另外,如果传入 PurePath 构造方法中的多个参数中,包含多个根路径,则只会有最后一个根路径及后面的子路径生效。例如:

from pathlib import *
path = PurePath('C://','D://','my_file.txt')
print(path)

程序执行结果为:

D:\my_file.txt

注意,对于 Windows 风格的路径,只有盘符(如 C、D等)才能算根路径。

需要注意的是,如果传给 PurePath 构造方法的参数中包含有多余的斜杠或者点( . ,表示当前路径),会直接被忽略( .. 不会被忽略)。举个例子:

from pathlib import *
path = PurePath('C://./my_file.txt')
print(path)

程序执行结果为:

C:\my_file.txt

PurePath 类还重载各种比较运算符,多余同种风格的路径字符串来说,可以判断是否相等,也可以比较大小(实际上就是比较字符串的大小);对于不同种风格的路径字符串之间,只能判断是否相等(显然,不可能相等),但不能比较大小。

举个例子:

from pathlib import *
# Unix风格的路径区分大小写
print(PurePosixPath('C://my_file.txt') == PurePosixPath('c://my_file.txt'))
# Windows风格的路径不区分大小写
print(PureWindowsPath('C://my_file.txt') == PureWindowsPath('c://my_file.txt'))

程序执行结果为:

False
True

比较特殊的是,PurePath 类对象支持直接使用斜杠(/)作为多个字符串之间的连接符,例如:

from pathlib import *
path = PurePosixPath('C://')
print(path / 'my_file.txt')

程序执行结果为:

C:/my_file.txt

通过以上方式构建的路径,其本质上就是字符串,因此我们完全可以使用 str() 将 PurePath 对象转换成字符串。例如:

from pathlib import *
# Unix风格的路径区分大小写
path = PurePosixPath('C://','my_file.txt')
print(str(path))

程序执行结果为:

C:/my_file.txt

PurePath类实例属性和实例方法

表 1 中罗列出了常用的以下 PurePath 类实例方法和属性。由于从本质上讲,PurePath 的操作对象是字符串,因此表 1 中的这些实例属性和实例方法,实质也是对字符串进行操作。

表 1 PurePath 类属性和方法

类实例属性和实例方法名 功能描述
PurePath.parts 返回路径字符串中所包含的各部分。
PurePath.drive 返回路径字符串中的驱动器盘符。
PurePath.root 返回路径字符串中的根路径。
PurePath.anchor 返回路径字符串中的盘符和根路径。
PurePath.parents 返回当前路径的全部父路径。
PurPath.parent 返回当前路径的上一级路径,相当于 parents[0] 的返回值。
PurePath.name 返回当前路径中的文件名。
PurePath.suffixes 返回当前路径中的文件所有后缀名。
PurePath.suffix 返回当前路径中的文件后缀名。相当于 suffixes 属性返回的列表的最后一个元素。
PurePath.stem 返回当前路径中的主文件名。
PurePath.as_posix() 将当前路径转换成 UNIX 风格的路径。
PurePath.as_uri() 将当前路径转换成 URL。只有绝对路径才能转换,否则将会引发 ValueError。
PurePath.is_absolute() 判断当前路径是否为绝对路径。
PurePath.joinpath(*other) 将多个路径连接在一起,作用类似于前面介绍的斜杠(/)连接符。
PurePath.match(pattern) 判断当前路径是否匹配指定通配符。
PurePath.relative_to(*other) 获取当前路径中去除基准路径之后的结果。
PurePath.with_name(name) 将当前路径中的文件名替换成新文件名。如果当前路径中没有文件名,则会引发 ValueError。
PurePath.with_suffix(suffix) 将当前路径中的文件后缀名替换成新的后缀名。如果当前路径中没有后缀名,则会添加新的后缀名。

对于表 1 中的这些实例属性和实例方法的用法,这里不再举例演示,有兴趣的读者可自行尝试它们的功能。

Path类的功能和用法

和 PurPath 类相比,Path 类的最大不同,就是支持对路径的真实性进行判断。

从图 1 可以轻易看出,Path 是 PurePath 的子类,因此 Path 类除了支持 PurePath 提供的各种构造函数、实例属性以及实例方法之外,还提供甄别路径字符串有效性的方法,甚至还可以判断该路径对应的是文件还是文件夹,如果是文件,还支持对文件进行读写等操作。

和 PurePath 一样,Path 同样有 2 个子类,分别为 PosixPath(表示 UNIX 风格的路径)和 WindowsPath(表示 Windows 风格的路径)。

由于文章篇幅有限,Path 类属性和方法众多,因此这里不再一一进行讲解,感兴趣的读者可通过官方手册  https://docs.python.org/3/library/pathlib.html 进行查阅。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python开启摄像头以及深度学习实现目标检测方法
Aug 03 Python
python统计中文字符数量的两种方法
Jan 31 Python
使用TensorFlow实现二分类的方法示例
Feb 05 Python
django query模块
Apr 20 Python
pyinstaller参数介绍以及总结详解
Jul 12 Python
Python socket实现的文件下载器功能示例
Nov 15 Python
如何通过命令行进入python
Jul 06 Python
Python使用lambda抛出异常实现方法解析
Aug 20 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
用Python自动清理系统垃圾的实现
Jan 18 Python
python中numpy.empty()函数实例讲解
Feb 05 Python
python 实现定时任务的四种方式
Apr 01 Python
Python fileinput模块如何逐行读取多个文件
Oct 05 #Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 #Python
Python中random模块常用方法的使用教程
Oct 04 #Python
python代数式括号有效性检验示例代码
Oct 04 #Python
关于Python字符编码与二进制不得不说的一些事
Oct 04 #Python
Python实现EM算法实例代码
Oct 04 #Python
python em算法的实现
Oct 03 #Python
You might like
PHP日期处理函数 整型日期格式
2011/01/12 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
Knockoutjs快速入门(经典)
2012/12/24 Javascript
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
Vue Ajax跨域请求实例详解
2017/06/20 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
JS防抖和节流实例解析
2019/09/24 Javascript
jQuery实现小火箭返回顶部特效
2020/02/03 jQuery
详解JavaScript之ES5的继承
2020/07/08 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
python进阶教程之循环对象
2014/08/30 Python
详解Python字符串对象的实现
2015/12/24 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
Python 下载Bing壁纸的示例
2020/09/29 Python
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
2017/08/18 HTML / CSS
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
初一家长会邀请函
2014/01/31 职场文书
打架检讨书2000字
2014/02/22 职场文书
幼师求职自荐信
2014/05/31 职场文书
体育口号大全
2014/06/18 职场文书
离婚起诉书范本
2015/05/18 职场文书
2016幼儿园新学期寄语
2015/12/03 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang
Matlab如何实现矩阵复制扩充
2021/06/02 Python