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实现人人网登录示例分享
Jan 19 Python
python文件操作整理汇总
Oct 21 Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 Python
Python学生成绩管理系统简洁版
Apr 05 Python
tornado 多进程模式解析
Jan 15 Python
使用DataFrame删除行和列的实例讲解
Apr 08 Python
Python 实现微信防撤回功能
Apr 29 Python
如何使用Python实现自动化水军评论
Jun 26 Python
pandas如何处理缺失值
Jul 31 Python
Python实现计算长方形面积(带参数函数demo)
Jan 18 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
Mar 16 Python
Python opencv缺陷检测的实现及问题解决
Apr 24 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
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
玩转图像函数库―常见图形操作
2006/09/03 PHP
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
PHP面向对象程序设计重载(overloading)操作详解
2019/06/13 PHP
php实现映射操作实例详解
2019/10/02 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
js 获取今天以及过去日期
2017/04/11 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
2018/09/16 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
Vue看了就会的8个小技巧
2021/01/21 Vue.js
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
python实现修改固定模式的字符串内容操作示例
2019/12/30 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
解决python 虚拟环境删除包无法加载的问题
2020/07/13 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
《翻越远方的大山》教学反思
2014/04/13 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang