Python的内置库pathlib

相信你一定用os库对文件系统进行过操作,比如文件读写,路径组合,上传下载等都会涉及到文件路径。但是某些操作使用os库就很不优雅,例如查找上级路径,不同操作系统间的路径处理等。今天我们就介绍一个Python内置的面向对象的路径库pathlib。

1、获取当前文件所在路径

from os import path
exec_path = path.dirname(__file__)
print(exec_path,type(exec_path))




from pathlib import Path,PurePath
cur_path = Path(__file__).parent
print(cur_path,type(cur_path))

运行结果:

e:/TestProject/iaas/test_data <class 'str'>
e:\TestProject\iaas\test_data <class 'pathlib.WindowsPath'>

总结:

  • os库返回的路径是str对象

  • 而pathlib返回的路径是一个WindowsPath的对象

  • WindowsPath对象有很多路径的属性,而str只有str的属性

2、获取当前文件的名称

from os import path
exec_path = path.basename(__file__)
print(exec_path,type(exec_path))




from pathlib import Path,PurePath
cur_path = Path(__file__).name
print(cur_path,type(cur_path))

运行结果:

t_test.py <class 'str'>
t_test.py <class 'str'>

总结:

  • os的库获取当前文件名称需要使用basename方法实现

  • pathlib获取当前文件名称只需要获取name属性的值即可

3、查找父路径

from os import path,getcwd
'''
cur_path:当前路径
par_path:父路径
gra_path:父父路径
'''
cur_path = path.dirname(__file__)
par_path = path.dirname(path.dirname(__file__))
gra_path = path.dirname(path.dirname(path.dirname(__file__)))
print(cur_path)
print(par_path)
print(gra_path)




from pathlib import Path,PurePath
cur_path = Path(__file__).parent
par_path = cur_path.parent
gra_path = par_path.parent
print(cur_path)
print(par_path)
print(gra_path)

运行结果:

e:/TestProject/iaas/test_data
e:/TestProject/iaas
e:/TestProject
e:\TestProject\iaas\test_data
e:\TestProject\iaas
e:\TestProject

总结:pathlib的方式要比os的方式优雅甚多,突出体现了面向对象的优势。

4、pathlib的PurePath和Path

  • PurePath代表纯路径,不代表真正的路径和文件,纯路径对象操作

  • Path代表真正的路径和文件,可以判断路径或者文件的属性和是否存在

  • Path是PurePath的子类,支持PurePath的各种属性和方法

  • PurePath有两个子类,PureWindowsPath和PurePosixPath,分别代表不同的操作系统的纯路径对象

Windows:

from pathlib import Path,PurePath
cur_path = Path(__file__)
print(cur_path,type(cur_path))


pur_path = PurePath(__file__)
print(pur_path,type(pur_path))

运行结果:

e:\TestProject\iaas\test_data\t_test.py <class 'pathlib.WindowsPath'>
e:\TestProject\iaas\test_data\t_test.py <class 'pathlib.PureWindowsPath'>

Linux:

>>> from pathlib import PurePath
>>> from pathlib import Path
>>> cur_path = Path('/home/env/internet')
>>> print(cur_path,type(cur_path))
/home/env/internet <class 'pathlib.PosixPath'>


>>> pur_path = PurePath('/home/env/internet')
>>> print(pur_path,type(pur_path))
/home/env/internet <class 'pathlib.PurePosixPath'>

总结:使用PurePath就可以实现跨操作系统的路径统一操作。

5、pathlib和os的功能对照

6、常用的pathlib.Path相关方法

Path.iterdir()  # 遍历目录的子目录或者文件


Path.is_dir()  # 判断是否是目录


Path.glob()  # 过滤目录(返回生成器)


Path.resolve()  # 返回绝对路径


Path.exists()  # 判断路径是否存在


Path.open()  # 打开文件(支持with)


Path.unlink()  # 删除文件或目录(目录非空触发异常)


Path.parts  # 分割路径 类似os.path.split(), 不过返回元组


Path.drive  # 返回驱动器名称


Path.root  # 返回路径的根目录


Path.anchor  # 自动判断返回drive或root


Path.parents  # 返回所有上级目录的列表


Path.with_name()  # 更改路径名称, 更改最后一级路径名


Path.with_suffix()  # 更改路径后缀


Path.joinpath()  # 拼接路径


Path.relative_to()  # 计算相对路径


Path.match()  # 测试路径是否符合pattern


Path.is_dir()  # 是否是文件


Path.is_absolute()  # 是否是绝对路径


Path.is_reserved()  # 是否是预留路径


Path.exists()  # 判断路径是否真实存在


Path.cwd()  # 返回当前目录的路径对象


Path.home()  # 返回当前用户的home路径对象


Path.stat()  # 返回路径信息, 同os.stat()


Path.chmod()  # 更改路径权限, 类似os.chmod()


Path.expanduser()  # 展开~返回完整路径对象


Path.mkdir()  # 创建目录


Path.rename()  # 重命名路径


Path.rglob()  # 递归遍历所有子目录的文件

往期推荐

Python的工厂模式

Python的可迭代对象与迭代器

Python的封装继承多态和多重继承

好文!必须在看

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值