Python pathlib 路径操作
Python pathlib 路径操作 的完整教学讲解。
路径创建
基本写法:创建路径对象
Path(<路径字符串>)
# 创建 Path 对象
from pathlib import Path
p = Path("/usr/local/bin")
基本写法:当前目录
Path.cwd()
# 获取当前工作目录
cwd = Path.cwd()
基本写法:用户主目录
Path.home()
# 获取用户主目录
home = Path.home()
基本写法:路径拼接
Path(<父路径>) / <子路径>
# 使用 / 运算符拼接路径
config = Path("/etc") / "nginx" / "nginx.conf"
基本写法:joinpath 多级拼接
<路径>.joinpath(<子路径1>, <子路径2>)
# 拼接多个路径段
p = Path("/var").joinpath("log", "app.log")
路径属性
基本写法:获取文件名
<路径>.name
# 返回最后一级路径名
p = Path("/a/b/c.txt")
print(p.name) # c.txt
基本写法:获取文件名(不含扩展名)
<路径>.stem
# 返回不含扩展名的文件名
p = Path("archive.tar.gz")
print(p.stem) # archive.tar
基本写法:获取扩展名
<路径>.suffix
# 返回最后一个扩展名
p = Path("file.tar.gz")
print(p.suffix) # .gz
基本写法:获取所有扩展名
<路径>.suffixes
# 返回所有扩展名列表
p = Path("file.tar.gz")
print(p.suffixes) # ['.tar', '.gz']
基本写法:获取父目录
<路径>.parent
# 返回上一级目录
p = Path("/a/b/c.txt")
print(p.parent) # /a/b
基本写法:获取所有父目录
<路径>.parents
# 返回所有上级目录的可迭代对象
p = Path("/a/b/c.txt")
for parent in p.parents:
print(parent)
基本写法:获取绝对路径
<路径>.resolve()
# 返回解析后的绝对路径
p = Path("./config").resolve()
基本写法:获取路径各部分
<路径>.parts
# 返回路径各段组成的元组
p = Path("/usr/local/bin")
print(p.parts) # ('/', 'usr', 'local', 'bin')
路径判断
基本写法:判断文件是否存在
<路径>.exists()
# 检查路径是否存在
if Path("file.txt").exists():
print("存在")
基本写法:判断是否为文件
<路径>.is_file()
# 检查是否为普通文件
Path("file.txt").is_file()
基本写法:判断是否为目录
<路径>.is_dir()
# 检查是否为目录
Path("/usr").is_dir()
基本写法:判断是否为绝对路径
<路径>.is_absolute()
# 检查是否为绝对路径
Path("/usr").is_absolute() # True
Path("usr").is_absolute() # False
文件读写
基本写法:读取文本文件
<路径>.read_text([encoding=<编码>])
# 一次性读取整个文本文件
content = Path("file.txt").read_text(encoding="utf-8")
基本写法:写入文本文件
<路径>.write_text(<内容>, [encoding=<编码>])
# 一次性写入文本
Path("output.txt").write_text("hello", encoding="utf-8")
基本写法:读取二进制文件
<路径>.read_bytes()
# 读取二进制内容
data = Path("image.png").read_bytes()
基本写法:写入二进制文件
<路径>.write_bytes(<数据>)
# 写入二进制数据
Path("data.bin").write_bytes(b"\x00\x01")
换行写法:打开文件上下文管理
with <路径>.open([mode], [encoding]) as <变量>:
# 使用 open 方法逐行读取
with Path("file.txt").open("r", encoding="utf-8") as f:
for line in f:
print(line.strip())
目录操作
基本写法:创建目录
<路径>.mkdir([parents=True], [exist_ok=True])
# 递归创建目录,已存在不报错
Path("a/b/c").mkdir(parents=True, exist_ok=True)
基本写法:删除空目录
<路径>.rmdir()
# 删除空目录
Path("empty_dir").rmdir()
基本写法:删除文件
<路径>.unlink()
# 删除单个文件
Path("file.txt").unlink()
基本写法:删除文件(不存在不报错)
<路径>.unlink(missing_ok=True)
# Python 3.8+ 文件不存在时不抛出异常
Path("file.txt").unlink(missing_ok=True)
基本写法:重命名或移动
<路径>.rename(<目标路径>)
# 移动文件或重命名
Path("old.txt").rename("new.txt")
基本写法:Python 3.13+ replace 兼容性
<路径>.replace(<目标路径>)
# 覆盖目标路径并替换
Path("temp.txt").replace("final.txt")
遍历目录
基本写法:列出目录内容
<路径>.iterdir()
# 遍历目录下的直接子项
for item in Path(".").iterdir():
print(item.name)
基本写法:glob 模式匹配
<路径>.glob(<模式>)
# 递归匹配文件
for p in Path(".").glob("**/*.py"):
print(p)
基本写法:rglob 递归匹配
<路径>.rglob(<模式>)
# 递归搜索所有子目录
for p in Path(".").rglob("*.py"):
print(p)
基本写法:Python 3.12+ 模式参数
<路径>.glob(<模式>, case_sensitive=<布尔>)
# Python 3.12+ 支持大小写敏感控制
for p in Path(".").glob("*.PY", case_sensitive=False):
print(p)
文件信息
基本写法:获取文件状态
<路径>.stat()
# 获取文件元数据
info = Path("file.txt").stat()
print(info.st_size, info.st_mtime)
基本写法:获取文件大小
<路径>.stat().st_size
# 返回文件字节数
size = Path("file.txt").stat().st_size
基本写法:获取修改时间
<路径>.stat().st_mtime
# 返回最后修改时间戳
import time
mtime = Path("file.txt").stat().st_mtime
print(time.ctime(mtime))
路径匹配与变换
基本写法:路径模式匹配
<路径>.match(<模式>)
# 判断路径是否匹配模式
Path("a/b/c.txt").match("*.txt") # True
Path("a/b/c.txt").match("a/*.txt") # False
基本写法:修改文件名
<路径>.with_name(<新名称>)
# 返回替换文件名后的新路径
p = Path("/a/b/c.txt")
new_p = p.with_name("d.txt") # /a/b/d.txt
基本写法:修改扩展名
<路径>.with_suffix(<新扩展名>)
# 返回替换扩展名后的新路径
p = Path("file.txt")
new_p = p.with_suffix(".md")
基本写法:修改父目录
<路径>.with_parent(<新父目录>)
# Python 3.12+ 替换父目录
p = Path("/old/file.txt")
new_p = p.with_parent("/new") # /new/file.txt
基本写法:相对路径
<路径>.relative_to(<基准路径>)
# 计算相对路径
p = Path("/usr/local/bin")
rel = p.relative_to("/usr") # local/bin
Python 3.13+ pathlib 增强
基本写法:Python 3.13+ from_uri
Path.from_uri(<URI>)
# Python 3.13+ 从 URI 创建路径
p = Path.from_uri("file:///usr/local/bin")
基本写法:Python 3.13+ as_uri
<路径>.as_uri()
# 将绝对路径转为 file URI
uri = Path("/usr/local").as_uri()
基本写法:Python 3.13+ full_match
<路径>.full_match(<模式>)
# Python 3.13+ 完整路径匹配
Path("/a/b/c.txt").full_match("/a/**/*.txt")