pathlib定义
pathlib 是Python内置库,Python 文档给它的定义是 Object-oriented filesystem paths(面向对象的文件系统路径)。pathlib 提供表示文件系统路径的类,其语义适用于不同的操作系统。
相对于 os 模块的 path 方法,Python3 标准库 pathlib 模块的 Path 对路径的操作会更简单。
基本用法
- Path.iterdir() # 遍历目录的子目录或者文件
- Path.is_dir() # 判断是否是目录
- Path.glob() # 过滤目录(返回生成器)
- Path.resolve() # 返回绝对路径
- Path.exists() # 判断路径是否存在
- Path.open() # 打开文件(支持with)
- Path.unlink() # 删除文件或目录(目录非空触发异常)
示例代码:
import pathlib
# 返回绝对路径
aa = pathlib.Path('/aaa/bbb')
bb = aa / '.' / 'ccc'
print(bb)
print(bb.resolve())
print('*' * 100)
cc = pathlib.Path('/aaa/bbb/ccc')
dd = cc / '..' / 'ddd'
print(dd)
print(dd.resolve())
print('*' * 100)
ee = pathlib.Path('/aaa/bbb/ccc')
ff = ee / '....' / 'ddd'
print(ff)
print(ff.resolve())
print('*' * 100)
gg = pathlib.Path('/aaa/bbb/ccc')
hh = gg / '../..' / 'ddd'
print(hh)
print(hh.resolve())
运行结果:
基本属性
- Path.parts # 分割路径 类似os.path.split(), 不过返回元组
- Path.drive # 返回驱动器名称
- Path.root # 返回路径的根目录
- Path.anchor # 自动判断返回drive或root
- Path.parent # 返回所有上级目录
- Path.parents # 返回所有上级目录的列表
示例代码:
import os
import pathlib
# 返回上一级目录
print(os.getcwd())
print(os.path.dirname(os.getcwd()))
print(os.path.dirname(os.path.dirname(os.getcwd())))
print(pathlib.Path.cwd().parent)
print('*' * 100)
# 返回所有上级目录的列表
parents = pathlib.Path.cwd().parents
for path in parents:
print(path)
运行结果:
改变路径
- Path.with_name() # 更改路径名称, 更改最后一级路径名
- Path.with_suffix() # 更改路径后缀
拼接路径
- Path.joinpath() # 拼接路径
- Path.relative_to() # 计算相对路径
示例代码:
import os
import pathlib
# 路径拼接
print(os.getcwd())
print(os.path.join(os.path.dirname(os.getcwd()), 'aaa', 'bbb'))
paths = ('aaa', 'bbb')
print(pathlib.Path.cwd().joinpath(*paths))
print(pathlib.Path.cwd().parent.joinpath(*paths))
运行结果:
测试路径
- 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() # 递归遍历所有子目录的文件
示例代码:
import os
import pathlib
# 返回当前目录的路径对象
print(os.getcwd())
print(os.path.dirname(__file__))
print(pathlib.Path.cwd())
运行结果: