1. 文件路径是什么? #

2. 核心概念 #

概念 说明
绝对路径 从盘符/根目录开始的完整路径
相对路径 相对当前工作目录
跨平台 Windows 用 \,Linux/macOS 用 /;用 Path 或 os.path.join 自动处理

3. pathlib.Path(推荐) #

3.1 创建与拼接 #

# 导入 Path 类
from pathlib import Path
# 用 / 拼接路径,跨平台兼容
p = Path("data") / "logs" / "app.log"
# 转成绝对路径并规范化
abs_p = p.resolve()
# 获取当前脚本所在目录
base = Path(__file__).resolve().parent
# 基于脚本目录拼接配置文件路径
config = base / "config" / "settings.json"

项目里常用「以项目根为基准」:

# 示例:manage.py 在项目根时
from pathlib import Path
# 项目根目录
BASE_DIR = Path(__file__).resolve().parent
# 拼接 .env 文件路径
env_file = BASE_DIR / ".env"
print(env_file)

3.2 常用属性与检查 #

from pathlib import Path
# 创建 Path 对象
f = Path("/var/log/app.log")
# 文件名(含扩展名)
print(f.name)
# 文件名(不含扩展名)
print(f.stem)
# 扩展名
print(f.suffix)
# 父目录
print(f.parent)
# 路径是否存在
print(f.exists())
# 是否为文件
print(f.is_file())
# 是否为目录
print(f.is_dir())

3.3 建目录、找文件 #

from pathlib import Path
# 拼接日志目录路径
log_dir = Path("logs") / "2025"
# 创建多级目录,已存在不报错
log_dir.mkdir(parents=True, exist_ok=True)
# 当前目录下所有 .py 文件
for py in Path(".").glob("*.py"):
    print(py)
# 递归搜索 src 下所有 .py 文件
for py in Path("src").rglob("*.py"):
    print(py)
方法 作用
mkdir(parents=True, exist_ok=True) 创建目录(含父级)
glob("*.json") 当前目录通配
rglob("*.py") 递归子目录通配

4. os.path(读老代码时) #

# 导入 os 模块
import os
# 拼接路径
full = os.path.join("data", "uploads", "a.png")
# 路径是否存在
print(os.path.exists(full))
# 是否为文件
print(os.path.isfile(full))
# 是否为目录
print(os.path.isdir("data"))
# 取文件名
print(os.path.basename(full))
# 取目录部分
print(os.path.dirname(full))

5. 与读写配合 #

# 创建 Path 对象
path = Path("config.json")
# 读取文本内容
text = path.read_text(encoding="utf-8")
# 写入 JSON 文本
path.write_text('{"ok": true}', encoding="utf-8")
# 或交给 open 读写
with open(path, "r", encoding="utf-8") as f:
    data = f.read()

6. 项目中的典型用法 #

from pathlib import Path
# 配置/静态资源路径(假设当前文件在子目录,parent.parent 回到项目根)
BASE_DIR = Path(__file__).resolve().parent.parent
TEMPLATE_DIR = BASE_DIR / "templates"
# 启动前确保上传目录存在
(BASE_DIR / "media" / "uploads").mkdir(parents=True, exist_ok=True)
# 按扩展名收集导出文件
csv_files = list((BASE_DIR / "exports").glob("*.csv"))

7. 项目开发要点 #

8. 总结 #

需求 推荐写法
拼接 Path("a") / "b" / "c.txt"
项目根 Path(__file__).resolve().parent
是否存在 path.exists()、path.is_file()
建目录 path.mkdir(parents=True, exist_ok=True)
找文件 path.glob(...)、path.rglob(...)
老项目 os.path.join、os.path.exists