pathlib 模块的目的是用面向对象(object-oriented)的 API 替换字符串的操作来解析、创建文件和目录。
Python 是跨平台的,模块 pathlib 包括一些类来处理 POSIX 或者 Windows 语法的文件系统的路径。它也包含一些特殊的类只操作字符串而不接触具体的操作系统,如:PurePosixPath 和 PureWindowsPath 。
为了正确的工作在真实的操作系统上,可以直接使用 Path 类。它会根据当前的操作系统来确定是否用 PosixPath 或者 WindowsPath。
创建路径
要创建一个路径对象 Path,第一个参数传入一个字符串,表示路径的名称。如果想要根据当前路径来创建一个新路径,可以使用 / 操作符,参数可以是一个字符串或者路径对象。
执行:
本例中,创建了3个路径对象,最后打印了生成的对象类型。其中创建 root 路径时,使用了上级的目录引用 ..。
resolve() 方法会按照文件系统,返回绝对路径。软连接会返回它指向的真实路径。
执行:
joinpath() 方法根据多个路径片段创建路径。
执行:
给出一个路径对象,然后希望获取当前路径下另一个文件对象或者不同扩展名的对象,可以使用 with_name() 和 with_suffix() 方法。
执行:
解析路径
Path 对象有很多方法和属性可以从路径获取部分值。例如 parts 属性根据路径分隔符分隔开返回一个序列。
执行:
属性 parent 返回一个路径的父级路径,相当于调用 os.path.dirname()。属性 parents 返回上级目录的迭代器,直到根目录。
执行:
还存在其他的属性返回路径的一些部分。属性 name 返回最后的路径分隔符之后的内容,suffix 返回扩展名,stem 返回扩展名之前的名称。
执行:
便利方法
home() 方法返回当前用户主目录,cwd() 方法返回当前目录。
目录内容
有 3 个方法可以获取文件系统的内容,iterdir() 返回一个生成器(generator),每次从当前目录返回一项。
执行:
glob() 方法只返回匹配了一定模式(pattern)的文件名:
执行:
rglob() 可以递归的访问子目录。
执行:
读取和写入文件
每个路径 Path 的实例都包含操作文件的方法。使用 read_bytes() 和 read_text() 方法立刻读取文件的内容。方法 write_bytes() 和 write_text() 写入文件。 open() 方法打开文件获取文件对象。
执行:
目录和软连接
mkdir() 方法可以创建目录。
执行:
使用 symlink_to() 方法创建软链接,链接名称是传给路径的值,symlink_to()的参数是指向的文件。
执行:
这个例子创建了一个软链接,最后使用 resolve() 方法打印了真实的文件名称。
文件类型
Path 路径实例包含多个方法测试文件的类型。
- is_file() 判断是否是文件
- is_dir() 判断是否是目录
- is_symlink() 判断是否是软链接
- is_fifo() 判断是否是 FIFO 队列
- is_block_device() 判断是否是块设备
- is_char_device() 判断是否是字符设备
文件属性
访问文件的详细信息可以使用 stat() 或者 lstat() 方法,lstat() 用于软链接。这些方法返回的信息是和 os.stat() 和 os.lstat() 一致的。
执行:
owner() 和 group() 方法直接返回文件的所有者和分组。
执行:
touch() 方法类似 unix 的命令 touch,创建一个文件或者更新文件的修改日期。
权限
chmod() 方法更改一个文件的权限,传递一个整数值。这个整数值可以使用模块 stat 创建。
执行:
删除
rmdir() 方法删除一个空目录。
执行:
如果目录不存在,会触发异常 FileNotFoundError。如果目录非空,则触发 OSError 错误,提示目录不是空的。
对于文件,软链接,或者其他的文件类型,使用 unlink() 方法。
执行: