Python 路径操作模块 pathlib
Python 路径操作模块 pathlib
1 pathlib 简介
pathlib 是跨平台的、面向对象的路径操作模块,可适用于不同的操作系统,其操作对象是各种操作系统中使用的路径(包括绝对路径和相对路径),pathlib 有两个主要的类,分别为 PurePath 和 Path。
pathlib 模块主类继承关系图
1)PurePath
PurePath 访问实际文件系统的“纯路径”,只负责对路径字符串执行操作。PurePath 有两个子类,即 PurePosixPath 和 PathWindowsPath,前者用于操作 UNIX(包括 Mac OS X)风格的路径,后者用于操作 Windows 风格的路径。
2)Path
Path 访问实际文件系统的“真正路径”,Path 对象可用于判断对应的文件是否存在、是否为文件、是否为目录等。有两个子类,即 PosixPath 和 WindowsPath,前者用于操作 UNIX(包括 Mac OS X)风格的路径,后者用于操作 Windows 风格的路径。
3)PurePath 和 Path 的区别
Path 是 PurePath 的子类,除了支持 PurePath 的各种操作、属性和方法之外,还会真正访问底层的文件系统,包括判断 Path 对应的路径是否存在,获取 Path 对应路径的各种属性(如是否只读、是文件还是文件夹等),甚至可以对文件进行读写。
PurePath 和 Path 最根本的区别在于,PurePath 处理的仅是字符串,而 Path 则会真正访问底层的文件路径,因此它提供了属性和方法来访问底层的文件系统。
4)UNIX 和 Windows 风格路径区别
UNIX 风格的路径和 Windows 风格路径的主要区别在于根路径和路径分隔符,UNIX 风格路径的根路径是斜杠(/),而 Windows 风格路径的根路径是盘符(c:);UNIX 风格的路径的分隔符是斜杠(/),而 Windows 风格路径的分隔符是反斜杠(\)。
注意:
考虑到操作系统的不同,在使用 PurePath 类时,如果在 UNIX 或 Mac OS X 系统上使用 PurePath 创建对象,该类的构造方法实际返回的是 PurePosixPath 对象;反之,如果在 Windows 系统上使用 PurePath 创建对象,该类的构造方法返回的是 PureWindowsPath 对象。
考虑到操作系统的不同,Path 类的使用同 PurePath 类。
2 pathlib 与 os 的区别
在 Python 3.4 之前,涉及路径相关操作,都用 os 模块解决,尤其是 os.path 这个子模块非常有用。在 Python 3.4 之后,pathlib 成为标准库模块,其使用面向对象的编程方式来表示文件系统路径,丰富了路径处理的方法。
1)pathlib 优势
相对于传统的 os 及 os.path,pathlib 具体如下优势:
- pathlib 实现统一管理,解决了传统操作导入模块不统一问题;
- pathlib 使得在不同操作系统之间切换非常简单;
- pathlib 是面向对象的,路径处理更灵活方便,解决了传统路径和字符串并不等价的问题;
- pathlib 简化了很多操作,简单易用。
2)pathlib 和 os 常用操作对比
通过常用路径操作的对比,可以更深刻理解 pathlib 和 os 的区别,便于在实际操作中做对照,也便于进行使用替代,详细对比如下:
pathlib 操作 | os 及 os.path 操作 | 功能描述 |
---|---|---|
Path.resolve() | os.path.abspath() | 获得绝对路径 |
Path.chmod() | os.chmod() | 修改文件权限和时间戳 |
Path.mkdir() | os.mkdir() | 创建目录 |
Path.rename() | os.rename() | 文件或文件夹重命名,如果路径不同,会移动并重新命名 |
Path.replace() | os.replace() | 文件或文件夹重命名,如果路径不同,会移动并重新命名,如果存在,则破坏现有目标。 |
Path.rmdir() | os.rmdir() | 删除目录 |
Path.unlink() | os.remove() | 删除一个文件 |
Path.unlink() | os.unlink() | 删除一个文件 |
Path.cwd() | os.getcwd() | 获得当前工作目录 |
Path.exists() | os.path.exists() | 判断是否存在文件或目录 name |
Path.home() | os.path.expanduser() | 返回电脑的用户目录 |
Path.is_dir() | os.path.isdir() | 检验给出的路径是一个文件 |
Path.is_file() | os.path.isfile() | 检验给出的路径是一个目录 |
Path.is_symlink() | os.path.islink() | 检验给出的路径是一个符号链接 |
Path.stat() | os.stat() | 获得文件属性 |
PurePath.is_absolute() | os.path.isabs() | 判断是否为绝对路径 |
PurePath.joinpath() | os.path.join() | 连接目录与文件名或目录 |
PurePath.name | os.path.basename() | 返回文件名 |
PurePath.parent | os.path.dirname() | 返回文件路径 |
Path.samefile() | os.path.samefile() | 判断两个路径是否相同 |
PurePath.suffix | os.path.splitext() | 分离文件名和扩展名 |
3 具体使用方法
以下操作是在 Windows 系统内完成的。
1)路径获取
传入字符串
在创建 PurePath 和 Path 时,既可以传入单个字符串,也可传入多个路径字符串,PurePath 会将它们拼接成一个字符串。
1 | from pathlib import * |
获取目录
- Path.cwd(),返回文件当前所在目录;
- Path.home(),返回电脑用户的目录。
1 | from pathlib import * |
目录拼接
拼接出 Windows 桌面路径,当前路径下的子目录或文件路径。
1 | from pathlib import * |
2)路径处理
获取路径的不同部分、或不同字段等内容,用于后续的路径处理,如拼接路径、修改文件名、更改文件后缀等。
1 | from pathlib import * |
3)路径判断
- Path.exists(),判断 Path 路径是否是一个已存在的文件或文件夹;
- Path.is_dir(),判断 Path 是否是一个文件夹;
- Path.is_file(),判断 Path 是否是一个文件。
1 | from pathlib import * |
4)路径建立、删除
- Path.mkdir(),创建文件夹;
- Path.rmdir(),删除文件夹,文件夹必须为空;
- Path.unlink(),删除文件。
1 | from pathlib import * |
5)路径匹配查找(迭代)
- Path.iterdir(),查找文件夹下的所有文件,返回的是一个生成器类型;
- Path.glob(pattern),查找文件夹下所有与 pattern 匹配的文件,返回的是一个生成器类型;
- Path.rglob(pattern),查找文件夹下所有子文件夹中与 pattern 匹配的文件,返回的是一个生成器类型。
iterdir 方法
1 | from pathlib import * |
glob 方法
1 | from pathlib import * |
rglob 方法
1 | from pathlib import * |
6)读、写文件
- Path.open(mode=’r’),以 “r” 格式打开 Path 路径下的文件,若文件不存在即创建后打开。
- Path.read_bytes(),打开 Path 路径下的文件,以字节流格式读取文件内容,等同 open 操作文件的 “rb” 格式。
- Path.read_text(),打开 Path 路径下的文件,以 str 格式读取文件内容,等同 open 操作文件的 “r” 格式。
- Path.write_bytes(),对 Path 路径下的文件进行写操作,等同 open 操作文件的 “wb” 格式。
- Path.write_text(),对 Path 路径下的文件进行写操作,等同 open 操作文件的 “w” 格式。
读、写模式汇总表
1 | from pathlib import * |
7)属性和方法汇总
PurePath 类属性和方法汇总
PurePath 类属性和方法汇总表
Path 类属性和方法汇总
Path 类属性和方法汇总表
4 应用实例
1)实例 1:获取文件列表(函数)
通过函数,返回文件列表,为后续迭代处理做好准备。
参数:
- path:输入路径,支持文件路径和文件夹路径。
- sub_dir:当为 True 时含子目录,为 False 时不含子目录
- suffix_list:文件类型列表,按要求的列出全部符合条件的文件,为空时列出全部文件,如:[“.xlsx”,”.xls”]
1 | from pathlib import * |
2)实例 2:定义文件路径
在输入文件路径的基础上,通过函数,构造输出文件路径,为后续处理、存储做好准备。
参数:
- in_path:输入文件路径
- path_str:文件路径构造字符
- file_suffix:输出文件后缀
1 | from pathlib import * |
5 总结
以上详细介绍了 Python 中路径操作的标准模块:pathlib,鉴于 pathlib 的优势,建议在 python 中优先使用,可以使路径处理更简洁、路径处理错误更少、编程效率更高、代码更易读。
其他未尽情况,可参见官方文档:pathlib - pathlib 1.0.1 documentation