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 判断文件(夹)是否存在
# 判断文件是否存在
new_path.exists(), file_path.exists()
# (True, False)
判断是否是文件(夹)
is_file = my_path.is_file()
is_dir = my_path.is_dir()
4 获取文件(夹)的名称/后缀
获取文件或目录的完整名称(包含后缀)
# 获取文件或目录的名称(包含后缀)
new_path.name, file_path.name
# ('orange', 'lemon.txt')
获取文件(夹)的基本名称, 不包含后缀
# 获取文件(夹)的基本名称, 不包含后缀
new_path.stem, file_path.stem
# ('orange', 'lemon')
获取文件后缀
file_path.suffix
# '.txt'
5 创建未知的路径
有时候, 我们指定的目录不存在, 甚至它的父级目录也不存在, 那么就需要创建路径中缺失的目录, 补齐路径.
file_path.parent.mkdir(parents=True, exist_ok=True)
会创建路径中缺失的目录,参数 parents=True
表示如果上级目录不存在也创建,exist_ok=True
表示如果目录已经存在则不引发异常。
6 写入内容
写入内容, 前提是首先路径存在, 如果不存在, 可以使用第5步的做法, 先创建需要补齐的路径.
# 写入文本内容, 前提是首先路径存在
file_path.write_text('Hello, Pathlib!21321',)
# 如果需要, 写入二进制内容
file_path.write_bytes(b'Hello, Pathlib!')
7 读取内容
# 读取文本内容
file_path.read_text()
8 移动/重命名文件
移动文件
# 移动文件
file_path.rename('E:/temp/orange/lemo2.txt')
重命名文件, 不修改文件的目录, 仅对文件名称进行修改.
new_file_path = file_path.with_name('name.txt')
file_path.rename(new_file_path)
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:temporangedocument - 副本 (2).txt True
# E:temporangedocument - 副本.txt True
# E:temporangedocument.txt True
# E:temporangewater False
11 获取绝对路径
通过.resolve()
方法实现.
file_path.resolve()
# WindowsPath('E:/temp/orange/apple/lemon.txt')
12 路径的字符串显示
比如显示文件的绝对路径.resolve()
的字符串.as_posix()
file_path2 = Path('./data/user/../admin/python.txt')
# 获取绝对路径, 并且以字符串显示, 使用`as_posix()`方法.
file_path2.resolve().as_posix()
13 删除文件(夹)
删除文件
# file_path是一个文件夹
file_path.unlink()
删除文件夹
# new_path是一个文件夹
new_path.rmdir()
删除一个目录, 删除目录以及它下面的所有文件/文件夹
有时, 确实是需要删除这个文件夹以及它下面的所有内容, 此时, 使用shutil
去操作.
import shutil
from pathlib import Path
# 定义目录路径
directory_path = Path('E:/temp/orange')
# 使用 shutil.rmtree() 删除目录及其下面的所有文件和子目录
shutil.rmtree(directory_path)
shutil.rmtree()
是一个强大的操作,还是得慎用, 像rm -rf /*
一样慎用.
14 获取文件的属性(大小/创建时间/修改时间/访问时间)
首先, 获取文件的属性
# 获取文件属性
file_stat = file_path.stat()
获取文件的大小
# 获取文件大小(字节数)
file_size = file_stat.st_size
获取文件的创建时间
# 获取文件创建时间
file_created_time = file_stat.st_ctime
获取文件最后的修改时间
# 获取文件修改时间
file_modified_time = file_stat.st_mtime
获取最后访问时间的时间戳
# 获取文件最后的访问时间
file_access_time = file_stat.st_atime
15 其他方法
当然, Path
很强大, 也还有很多其他的方法和熟悉, 可以参考官方文档去检索:
https://docs.python.org/3/library/pathlib.html
2 关于
总体而言,如果我们在更高的python版本上操作系统文件路径,那就更推荐使用 pathlib
,特别是在需要处理文件路径时。它提供了更现代、更清晰和更强大的工具来操作路径。本文主要是笔者在工作和生活中参考os.path
库中常用到的比较多的一些方法, 写的Pathlib
库中一些常用的操作.
最后, 欢迎关注我的微信公众号:
原文始发于微信公众号(其之):python pathlib:面向对象的文件(夹)路径处理库
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204923.html