使用面向对象的 API 而不是低级字符串操作来解析,构建,测试和以其他方式处理文件名和路径。
构建路径
要创建引用相对于现有路径值的新路径,可以使用 运算符来扩展路径,运算符的参数可以是字符串或其他路径对象。
正如示例所示,运算符在给定路径值时将它们组合在一起,并且在包含父目录引用时不会对结果进行规范化 。但是,如果某段以路径分隔符开头,则会以与之相同的方式将其解释为新的“根”引用 ,从路径值中间删除额外路径分隔符,如此处的示例所示。
路径类包括 方法,通过查看目录和符号链接的文件系统以及生成名称引用的绝对路径来规范化路径。
这里相对路径转换为绝对路径 。如果输入路径包含符号链接,那么也会扩展这些符号链接以允许已解析的路径直接引用目标。
要在事先不知道段时构建路径,请使用 ,将每个路径段作为单独的参数传递。
与运算符一样,调用会创建一个新实例。
给定一个现有的路径对象,很容易构建一个具有微小差异的新对象,例如引用同一目录中的不同文件,使用创建替换文件名的新路径。使用 创建替换文件扩展名的新路径。
两种方法都返回新对象,原始文件保持不变。
解析路径
Path 对象具有从名称中提取部分值的方法和属性。例如, 属性生成一系列基于路径分隔符解析的路径段。
序列是一个元组,反映了路径实例的不变性。
有两种方法可以从给定的路径对象“向上”导航文件系统层次结构。 属性引用包含路径的目录的新路径实例,通过 返回值。 属性是一个可迭代的,它产生父目录引用,不断地“向上”路径层次结构,直到到达根目录。
该示例遍历属性并打印成员值。
可以通过路径对象的属性访问路径的其他部分。 属性保存路径的最后一部分,位于最终路径分隔符( 生成的相同值)之后。属性保存扩展分隔符后面的值,属性保存后缀之前的名称部分。
虽然和值类似于 生成的值,但值仅基于 而不是完整路径。
创建具体路径
可以从引用文件系统上的文件,目录或符号链接名称(或潜在名称)的字符串创建具体类的实例。该类还提供了几种方便的方法,用于使用常用的更改位置(例如当前工作目录和用户的主目录)构建实例。
目录内容
有三种方法可以访问目录列表,以发现文件系统上可用文件的名称。 是一个生成器, 为包含目录中的每个项生成一个新实例。
如果不引用目录,则 引发。
仅查找与模式匹配的文件。
glob 处理器支持使用模式前缀进行递归扫描 或通过调用而不是。
由于此示例从父目录开始,因此需要进行递归搜索以查找匹配的示例文件 。
读写文件
每个 实例都包含用于处理它所引用的文件内容的方法。要读取内容,使用 或 。要写入文件,使用 或 。
使用 方法打开文件并保留文件句柄,而不是将名称传递给内置 函数。
操作目录和符号链接
如果路径已存在,则 引发 。
使用 创建符号链接,链接将根据路径的值命名,并将引用作为 参数给出的名称。
此示例创建一个符号链接,然后用 读取链接来查找它指向的内容,并打印名称。
文件类型
此示例创建了几种不同类型的文件,并测试这些文件以及本地操作系统上可用的一些其他特定于设备的文件。
每一种方法,,, ,,, 和 ,都不带任何参数。
文件属性
可以使用方法 或 (用于检查可能是符号链接的某些内容的状态)访问有关文件的详细信息 。这些方法与 和 产生相同的结果。
输出将根据示例代码的安装方式而有所不同,尝试在命令行上传递不同的文件名 。
为了更简单地访问有关文件所有者的信息,使用 和。
方法类似于 Unix 的 命令,创建文件或更新现有文件的修改时间和权限。
运行多次此示例会在后续运行中更新现有文件。
权限
在类 Unix 系统上,可以使用 更改文件权限,将模式作为整数传递。可以使用模块中定义的常量构造模式值。此示例切换用户的执行权限位。
删除
有两种方法可以从文件系统中删除内容,具体取决于类型。要删除空目录,使用 。
如果目录不存在会引发错误 ,尝试删除非空目录也是错误的。
对于文件,符号链接和大多数其他路径类型使用 。
用户必须具有删除文件,符号链接,套接字或其他文件系统对象的权限。
参考文档:
https://pymotw.com/3/pathlib/index.html
领取专属 10元无门槛券
私享最新 技术干货