python pathlib:面向对象的文件(夹)路径处理库¶
0 背景¶
pathlib 是 Python 标准库中用于处理文件路径的模块。它在 Python 3.4 版本中被引入,提供了一种更直观和面向对象的方式来处理文件系统路径。pathlib 模块定义了 Path 类,用于表示文件系统中的路径。
一般, python最基本的os.path库也可以处理系统文件路径的问题, 那相比于os.path, pathlib 库提供一些优势, 使得在很多情况下更加方便和使用:
- 面向对象:
pathlib使用面向对象的设计,路径被表示为对象,而不是简单的字符串。这样的设计使得代码更具可读性和可维护性。 - 直观的语法:
pathlib的路径拼接语法更直观,可以使用/操作符来拼接路径,如果是os.path, 需要使用os.path.join()函数调用。 - 链式操作:
pathlib允许我们使用链式操作,例如path / 'subdir' / 'file.txt'。这使得代码更简洁。 - 更吊的功能:
pathlib提供了许多额外的方法和属性,例如读取和写入文件内容的方法, 判断路径是否为文件或目录的方法等,一般实现读取写入通过open方法去实现。这样就减少了对其他模块(如os或shutil)的依赖。
1 使用¶
1 创建一个文件对象¶
from pathlib import Path
# 指定一个文件(夹)路径
new_path = Path('E:/temp/orange')
# WindowsPath('E:/temp/orange')
2 使用 / 操作符来拼接路径¶
# 使用 / 操作符来拼接路径:
file_path = new_path / 'apple' / 'lemon.txt'
# WindowsPath('E:/temp/orange/apple/lemon.txt')
3 判断文件(夹)是否存在¶
判断是否是文件(夹)
4 获取文件(夹)的名称/后缀¶
获取文件或目录的完整名称(包含后缀)
获取文件(夹)的基本名称, 不包含后缀
获取文件后缀
5 创建未知的路径¶
有时候, 我们指定的目录不存在, 甚至它的父级目录也不存在, 那么就需要创建路径中缺失的目录, 补齐路径.
会创建路径中缺失的目录,参数 parents=True 表示如果上级目录不存在也创建,exist_ok=True 表示如果目录已经存在则不引发异常。
6 写入内容¶
写入内容, 前提是首先路径存在, 如果不存在, 可以使用第5步的做法, 先创建需要补齐的路径.
# 写入文本内容, 前提是首先路径存在
file_path.write_text('Hello, Pathlib!21321',)
# 如果需要, 写入二进制内容
file_path.write_bytes(b'Hello, Pathlib!')
7 读取内容¶
8 移动/重命名文件¶
移动文件
重命名文件, 不修改文件的目录, 仅对文件名称进行修改.
file_path.with_name(new_name) 是 pathlib.Path 对象的方法,用于返回一个具有新文件名的新路径对象,而不更改路径的其余部分。这个方法通常用于仅仅修改文件名。
在linux中, 文件移动和重命名的操作都是通过mv的命令去完成操作的.
9 获取父级目录¶
# 获取父级的目录
new_path.parent, file_path.parent
# (WindowsPath('E:/temp'), WindowsPath('E:/temp/orange/apple'))
10 遍历目录下所有文件(夹)¶
# 遍历目录中的文件和子目录
for file in new_path.iterdir():
print(file, file.is_file())
# E:\temp\orange\document - 副本 (2).txt True
# E:\temp\orange\document - 副本.txt True
# E:\temp\orange\document.txt True
# E:\temp\orange\water False
11 获取绝对路径¶
通过.resolve()方法实现.
12 路径的字符串显示¶
比如显示文件的绝对路径.resolve()的字符串.as_posix()
file_path2 = Path('./data/user/../admin/python.txt')
# 获取绝对路径, 并且以字符串显示, 使用`as_posix()`方法.
file_path2.resolve().as_posix()
13 删除文件(夹)¶
删除文件
删除文件夹
删除一个目录, 删除目录以及它下面的所有文件/文件夹
有时, 确实是需要删除这个文件夹以及它下面的所有内容, 此时, 使用shutil去操作.
import shutil
from pathlib import Path
# 定义目录路径
directory_path = Path('E:/temp/orange')
# 使用 shutil.rmtree() 删除目录及其下面的所有文件和子目录
shutil.rmtree(directory_path)
shutil.rmtree() 是一个强大的操作,还是得慎用, 像rm -rf /*一样慎用.
14 获取文件的属性(大小/创建时间/修改时间/访问时间)¶
首先, 获取文件的属性
获取文件的大小
获取文件的创建时间
获取文件最后的修改时间
获取最后访问时间的时间戳
15 其他方法¶
当然, Path很强大, 也还有很多其他的方法和熟悉, 可以参考官方文档去检索:
https://docs.python.org/3/library/pathlib.html
2 关于¶
总体而言,如果我们在更高的python版本上操作系统文件路径,那就更推荐使用 pathlib,特别是在需要处理文件路径时。它提供了更现代、更清晰和更强大的工具来操作路径。本文主要是笔者在工作和生活中参考os.path库中常用到的比较多的一些方法, 写的Pathlib库中一些常用的操作.
最后, 欢迎关注我的微信公众号:
