Python-pathlib路径实践
什么是pathlib?
pathlib
是从Python3.4版本开始引入的一个路径操作的基本库,为了更加方便使用者创建和操作文件路径。
在pathlib
没出来之前,我们都需要使用str
或者os.path
获取路径,但是有了pathlib
之后,我们会获得一个名为Path
的类对象,拥有许多可以对路径操作的方法,比起之前使用os模块更加方便。
使用前需要先导入
1 | from pathlib import Path |
转化为Path对象
假如你有一个字符串路径,你想要将它转化为Path对象,只需要将其放入Path中,他会根据操作系统的类型自动将其转化为合法的路径(即使你的路径不规范)
1 | path = "D:///Python_ProjectHouse\\\Hardcore_Python\\\print_format.py" |
在上面的例子中,放入了一个奇怪的路径格式,Path模块直接就将其转化为了WindowsPath
对象,且路径问题也被修复了
路径获取
最常用的就是获取当前文件、文件夹的路径
Path内实现了__str__
的方法,因此可以很容易转化为字符串。
1 | # 获取当前工作目录的绝对路径 |
如果你输入的是一个相对路径,那么会返回一个绝对路径
1 | # 获得绝对路径 |
如果输入一个绝对路径,也可以使用下面的方法获得相对路径
children.relative_to(father)方法是指children相对于father的路径
1 | path = Path("pathlib_demo.py") |
父与子路径
有了路径之后我们为了实现路径的拼接,有时候需要获取上一级目录的路径,Path对象也是可以做到的。
找到父路径使用的是parent
或者parents
属性。
1 | path = path.absolute() |
找到当前目录下的所有文件路径,可以使用iterdir()
,但是他不会递归查找子文件下的文件。
如果想要筛选文件的类型,使用gloab()
和rglob()
(会递归寻找子文件下的文件)是更好的选择。
1 | # 列出所有子路径 不会递归搜索子文件夹 |
路径拼接
Path对象相比os.path.join()
方法拼接路径要方便得多,直接在字符串和Path对象之间使用/
即可拼接。
如果想要更加的直观,可以使用Path.joinpath()
的方法。
1 |
|
路径合法检查
获得了一个路径,Path会自动合法化路径,但是不会检查路径是否存在,这时候需要自行判断是否为存在。
使用判断方法后会根据情况返回一个bool值
1 | # 判断路径是否存在 |
文件属性
如果当前路径为文件路径且存在的话,Path还提供了一些方法来获得文件的基本属性
文件的具体信息使用的是stat()
方法,他会返回文件的所有属性信息,常用的有:
- st_size 文件大小 单位是byte
- st_ctime 在 Windows 系统中,这是文件创建的时间。单位是秒
- st_mtime 文件最后修改的时间,单位是秒
- st_atime 文件最后访问的时间,单位是秒
获得时间大小都是从 1970 年 1 月 1 日 00:00:00 UTC 开始计算。
1 | # 获得文件名 |
要注意的是stat()
中返回的时间是时间戳的形式,如果要格式化,可以使用datetime
模块
1 | # 转化为规则时间 |
还有些不常用的操作,比如修改文件名和文件后缀(只是修改了Path的值,真实的文件名和后缀没有被修改,要真正修改需要使用path.rename()
方法)
1 | # 修改文件后缀 |
文件操作
Path不仅支持对现有路径的操作,支持使用touch()
创建一个文件或使用mkdir()
创建一个目录
删除目录之前,最好要使用path.exists()
来判断一下当前文件/文件夹是否存在
1 | # 创建文件 |
打开和写入文件
Path还支持打开文件,而且还支持with
这种上下文打开的方式。
常见的打开模式都是支持的
- w 写入 会覆盖之前的记录
- a 追加 在原记录之下追加信息
- r 读取 只读取文件
写入和读取都支持write_text()
和write_bytes()
这两种方式
1 | # 打开文件 |