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

简介: 相信你一定用os库对文件系统进行过操作,比如文件读写,路径组合,上传下载等都会涉及到文件路径。但是某些操作使用os库就很不优雅,例如查找上级路径,不同操作系统间的路径处理等。今天我们就介绍一个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'>
复制代码


小结


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


网络异常,图片无法展示
|


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()  # 递归遍历所有子目录的文件
相关文章
|
2月前
|
数据采集 Python
Python实用记录(七):通过retinaface对CASIA-WebFace人脸数据集进行清洗,并把错误图路径放入txt文档
使用RetinaFace模型对CASIA-WebFace人脸数据集进行清洗,并将无法检测到人脸的图片路径记录到txt文档中。
45 1
|
4月前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
420 1
|
2月前
|
IDE 开发工具 iOS开发
Python编程案例:查找指定文件大小的文件并输出路径
Python编程案例:查找指定文件大小的文件并输出路径
28 3
|
3月前
|
Python
python之路径 | 11
python之路径 | 11
|
2月前
|
Python
Python实用记录(十二):文件夹下所有文件重命名以及根据图片路径保存到新路径下保存
这篇文章介绍了如何使用Python脚本对TTK100_VOC数据集中的JPEGImages文件夹下的图片文件进行批量重命名,并将它们保存到指定的新路径。
37 0
|
3月前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能物流路径优化
使用Python实现智能物流路径优化
153 1
|
4月前
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
52 4
|
4月前
|
存储 Python
【Leetcode刷题Python】滑雪路径消耗时间:Testing Round #16 (Unrated) C. Skier
Leetcode题目"Testing Round #16 (Unrated) C. Skier"的Python解决方案,题目要求计算给定滑雪路径字符串的总耗时,其中未走过的边耗时5秒,走过的边耗时1秒。
57 4
|
4月前
|
存储 Python
【Leetcode刷题Python】1496.判断路径是否相交
Leetcode第1496题"判断路径是否相交"的Python代码实现,通过使用字典存储方向和集合记录访问过的坐标点来检测路径是否与自身相交。
49 2
|
4月前
|
机器人 Python
【Leetcode刷题Python】63. 不同路径 II
LeetCode 63题 "不同路径 II" 的Python解决方案,使用动态规划算法计算在有障碍物的网格中从左上角到右下角的不同路径数量。
27 1