参考文档:https://docs.python.org/dev/library/pathlib.html#methods
在 Python
当中,如果你想控制路径,基本上绕不开 os.path。我希望看完这篇文章以后,熟练使用 Python
的你能立刻开始使用 pathlib
模块,一刻也不要耽误。
pathlib
相对于 os.path
有以下优势:
pathlib
导入更加清晰;- 采用面向对象编程,能同时存储更多状态,
os.path
返回的通常只有一个字符串; pathlib
使用更简单。
获取路径相关信息
pathlib
会把路径相关信息都存在一个 Path
的核心类里面,比如用户名,后缀名,上层目录,文件创建时间,文件大小等等。 这些 os.path
是没有办法一次性都给我们的,因为 os.path
调用的函数几乎都是返回字符串格式,不能像 Path
对象这样保存状态。
1, 获取当前文件路径。这种操作方式可能会包含相对路径信息。
from pathlib import Path
# 列出子目录
# 获取当前路径
p = Path('.')
# 列出子目录
p.iterdir()
# 获取py文件
p.glob('**/*.py')
# 递归获取py文件
p.rglob('**/*.py')
# 在目录树种导航
p / 'init.d' / 'data' / 'source'
# 查询路径属性
p.exists()
p.is_dir()
p.is_file()
p.mkdir()
p.rename()
p.replace()
p.rmdir()
p.touch()
p.unlink()
p.write_text()
# 打开文件
with p.open() as f:
f.readline()
# 获取当前文件和文件夹的元信息。
# posix.stat_result(
# st_mode=16893,
# st_ino=60833797,
# st_dev=64784,
# st_nlink=2,
# st_uid=501,
# st_gid=501,
# st_size=4096,
# st_atime=1571387891,
# st_mtime=1571387890,
# st_ctime=1571387890)
st = p.stat()
# 转换为绝对目录
# 设置 `strict=True`,如果目录不存在则抛出 FileNotFoundError
p = p.resolve( strict=True)
# 获取父目录
parent = p.parent.parent
# 获取所有父目录
parents = p.parents
first_p = parents[0]
second_p = parents[1]
# TODO: 可以封装的技能,目前未实现
parents[-3]
7,
# 获取文件名称
name = p.name
# 获取文件后缀名。
suffix = p.suffix
suffixes = p.suffixes
# 获取不含后缀名的文件名
file_without_suffix = p.stem
# 表示(本地或全局)根的字符串(如果有)
p.root
#将路径表示为fileURI
p.as_uri()
# 返回路径是否为绝对路径。
p.is_absolute()
# 返回此路径是否相对于其他路径。
p.is_relative_to()
# 将此路径与提供的glob样式模式匹配.
p.match('*.py')
路径操作
# 改变文件名为 webben.py,生成新路径,实际文件不发生变化
# 原来的文件名封装在 p 对象中
with_name = p.with_name('webben.py')
# 改变后缀名,生成新路径,实际文件不发生变化
with_suffix = p.with_suffix('.jpg')
# 路径拼接。 pathlib 提供了和 os.path.join() 类似的路径拼接方式:
new_path = p.joinpath('join_path')
new_path = p / 'data/webben' / 'windows'