随脚本一起分发的资源,可以用 path(__file__).resolve().parent 固定基准目录,再用 / 拼接子路径。用户传入的相对路径仍可以按当前工作目录解释。

先复现工作目录的变化
创建 demo/read.py 和 demo/data/message.txt,在文本文件中写入 hello。先从 demo 运行,再从上一级目录运行。
from pathlib import Path
print("cwd:", Path.cwd())
print(Path("data/message.txt").read_text(encoding="utf-8"))
从 demo 内执行 python3 read.py 可以读到文件。从上一级执行 python3 demo/read.py 时,相对路径指向上一级的 data。
立即学习“Python免费学习笔记(深入)”;
把内置资源固定到脚本目录
用以下代码替换 read.py。
from pathlib import Path base = Path(__file__).resolve().parent resource = base / "data" / "message.txt" print(resource.read_text(encoding="utf-8"))
在两个目录运行时,预期都输出 hello。
按调用位置处理用户路径
需要允许用户指定路径时,可把默认资源和显式参数分开处理。
from pathlib import Path import sys default = Path(__file__).resolve().parent / "data" / "message.txt" target = Path(sys.argv[1]).expanduser() if len(sys.argv) > 1 else default print(target.read_text(encoding="utf-8"))
用户显式传入相对路径时,它仍相对于当前工作目录。在交互式环境中应显式选择基准目录。


















