Pathlib | 路径操作从此不再难 | Python 主题月

本文正在参加「Python主题月」,详情查看 活动链接

相信你一定用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'>
复制代码

小结

  1. os库返回的路径是str对象

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

  3. 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'>
复制代码

小结

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

  2. 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

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

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

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

  4. 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的功能对照

image.png

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()  # 递归遍历所有子目录的文件
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享