Pathlib库:Python面向对象的文件路径处理(一)

简介: Pathlib库:Python面向对象的文件路径处理(一)

前言


Pathlib库提供了一个面向对象的API来解析,建立,测试和处理文件名和路径,而不是使用底层字符串操作


其中Pathlib库有2个非常关键的类名:PurePosixPath,PureWindowsPath。它们可以在任意操作系统上实例化和使用,因为它们只处理文件名与目录名。


要实例化一个具体的类来处理真正的文件系统,需要使用Path得到一个PosixPath或WindowsPath,至于取哪个,取决于你是什么系统。


建立路径


下面,我们来通过Pathlib库建立路径。示例如下:

import pathlib
users = pathlib.PurePosixPath('/Users')
print(users)
users_liyuanjing = users / 'liyuanjinglyj'
print(users_liyuanjing)
users_yellow = users / pathlib.PurePosixPath('yellow')
print(users_yellow)
users_etc = users / '/ect/'
print(users_etc)


运行之后,效果如下:

如上面代码所示,我们通过PurePosixPath实例化一个新路径,新路径的对象表示的就是这个字符串的值。


而像之前使用os.path.join()组合路径,这里可以直接使用"/"符号进行拼接,即可以拼接字符串,也可以在拼接一个新路径的PurePosixPath对象。不过,有一点和os.path.join()一样,就是组合路径中,一旦后面也有“/”符号,那么就会舍弃前面的路径,比如最后的/etc路径。


joinPath()


既然提到了os.path.join()函数,我们就先来介绍一个Pathlib库中很像它的函数:joinPath()。它也是用于拼接路径的,具体示例如下:

import pathlib
users = pathlib.PurePosixPath()
paths = ['liyuanjinglyj', 'yellow']
result = users.joinpath(*paths)
print(result)


运行之后,效果如下:


路径格式化


既然是字符串路径,那么拼接的时候,肯定会有不规范的地方。所以,我们需要使用resolve()函数进行字符串路径规范化,示例如下:

import pathlib
users = pathlib.Path()
result = users / '..' / 'liyuanjing'
print(result.resolve())
users = pathlib.Path('/Users/local')
result = users / '..' / 'liyuanjing'
print(result.resolve())


运行之后,效果如下:


如上图所示,它会自动格式化路径,同时转化为绝对路径。


with_name()与with_suffix()


with_name():创建一个新路径,将一个路径中的文件名替换成为另一个不同的文件名。


with_suffix():创建一个新路径,将文件名的扩展名替换为一个不同的值。


示例如下:

import pathlib
one = pathlib.PurePosixPath('/base_demo/demo.py')
print(one)
two = one.with_name("yellow.py")
print(two)
three = two.with_suffix(".pyc")
print(three)


运行之后,效果如下:


如上图所示,with_name将文件名demo替换成了yellow。而with_suffix将文件名后缀py替换成了pyc。


解析路径


既然有组合路径,替换路径等。那么也会有解析路径,毕竟有时候我们只想要文件名,那么就必须分解路径。


分解路径会用到PurePosixPath成员变量parts,示例如下:

import pathlib
one = pathlib.PurePosixPath('D:/Users/base_demo/demo.py')
print(one.parts)


运行之后,效果如下:


可以看到,这里将路径中的所有“/”分割的符号都分解了,最后一个肯定就是文件名或者文件(只有文件的话)。


既然这里,我们可以通过一层层的分解得到各个文件的名称,那么PurePosixPath类也肯定有层级给文件名分类,比如像获取某个文件的父目录,可以通过如下代码做到:

import pathlib
one = pathlib.PurePosixPath('D:/Users/base_demo/demo.py')
print(one.parent)
print("----------")
for name in one.parents:
    print(name)


运行之后,效果如下:


通过parents,我们可以一级一级的返回其父亲目录,直到根目录为止。


这里,还有一些成员变量在实际的应用中会经常的用到,示例如下:

import pathlib
one = pathlib.PurePosixPath('D:/Users/base_demo/demo.py')
print(one.name)
print(one.suffix)
print(one.stem)


运行之后,效果如下:

name:用于获取最后的文件名与后缀。


suffix:用于获取文件名的后缀


stem:用于获取文件名不要后缀


home()与cwd()


home():直接生成系统用户目录的路径


cwd():用于获取项目的绝对路径


示例如下:

import pathlib
one = pathlib.Path.home()
print(one)
two = pathlib.Path.cwd()
print(two)


运行之后,效果如下:

相关文章
|
2天前
|
存储 JSON API
Pydantic:目前最流行的Python数据验证库
在处理来自系统外部的数据,如API、终端用户输入或其他来源时,我们必须牢记开发中的一条基本原则:“永远不要相信用户的输入”。 因此,我们必须对这些数据进行严格的检查和验证,确保它们被适当地格式化和标准化。这样做的目的是为了确保这些数据符合我们的程序所需的输入规范,从而保障项目能够正确且高效地运行。
|
3天前
|
存储 缓存 索引
Python中的NumPy库详解
Python中的NumPy库详解
|
6天前
|
XML 自然语言处理 关系型数据库
CasADi - 最优控制开源 Python/MATLAB 库4
CasADi - 最优控制开源 Python/MATLAB 库
17 4
|
5天前
|
算法 数据可视化 机器人
Pinocchio - 开源多刚体动力学 C++、Python库
Pinocchio - 开源多刚体动力学 C++、Python库
8 2
|
5天前
|
存储 网络协议 Python
Python如何用PyModbus库进行Modbus TCP通信
使用python解决工业通信问题是一个非常好的选择,python具有丰富的生态,可以轻松解决工业通信的各种问题。 本篇主要介绍使用pymodbus库进行modbus tcp仿真,实现pc端读取plc或工业设备modbus变量。
|
Linux Python Windows
Pathlib 路径操作从此不再难 | Python 主题月
相信你一定用os库对文件系统进行过操作,比如文件读写,路径组合,上传下载等都会涉及到文件路径。但是某些操作使用os库就很不优雅,例如查找上级路径,不同操作系统间的路径处理等。今天我们就介绍一个Python内置的面向对象的路径库pathlib。
354 0
|
7天前
|
算法 程序员 开发工具
百万级Python讲师又一力作!Python编程轻松进阶,豆瓣评分8.1
在学习Python的旅程中你是否正在“绝望的沙漠”里徘徊? 学完基础教程的你,是否还在为选择什么学习资料犹豫不决,不知从何入手,提高自己?
百万级Python讲师又一力作!Python编程轻松进阶,豆瓣评分8.1
|
5天前
|
算法 程序员 开发工具
百万级Python讲师又一力作!Python编程轻松进阶,豆瓣评分8.1
在学习Python的旅程中你是否正在“绝望的沙漠”里徘徊? 学完基础教程的你,是否还在为选择什么学习资料犹豫不决,不知从何入手,提高自己?
|
3天前
|
数据采集 存储 人工智能
掌握Python编程:从基础到进阶的实用指南
【8月更文挑战第17天】 本文旨在通过浅显易懂的语言和实际案例,为初学者和有一定基础的开发者提供一条清晰的Python学习路径。我们将从Python的基本语法入手,逐步深入到面向对象编程、数据科学应用及网络爬虫开发等高级主题。每个部分都配备了代码示例和实操建议,确保读者能够将理论知识转化为实际能力。无论你是编程新手,还是希望提升Python技能的开发者,这篇文章都将为你打开一扇通往高效编程世界的大门。
7 2
|
7天前
|
Python
python Process 多进程编程
python Process 多进程编程
17 1