python路径应基于脚本位置动态生成而非硬编码:用Path(__file__).parent构建绝对路径,避免依赖当前工作目录;相对路径以工作目录为起点易出错,推荐统一以脚本位置为基准构造路径。

Python 中路径写法关键看你是想让代码在任何位置都能运行(推荐用绝对路径逻辑),还是只在当前目录下临时测试(可用相对路径)。但要注意:Python 本身没有“绝对路径语法”和“相对路径语法”的区别,只有字符串写法不同,真正起作用的是你如何构造这个字符串。
相对路径怎么写
相对路径以当前工作目录(不是脚本所在目录)为起点。比如你在终端进入 /home/user/project 后运行 python script.py,那当前工作目录就是这个路径。
-
"data/file.txt"→ 当前目录下的data文件夹里的文件 -
"../config.ini"→ 上一级目录中的配置文件 -
"./logs/app.log"→ 当前目录下logs/app.log(./可省略)
绝对路径怎么写(安全写法)
硬写 "/home/user/project/data/file.txt" 或 "C:UsersNameprojectdata.txt" 看似是绝对路径,但会严重限制代码移植性——换台电脑就报错。真正可靠的“绝对路径”,是基于脚本位置动态生成的:
- 用
Path(__file__).parent(推荐,Python 3.4+):
from pathlib import Path<br>config_path = Path(__file__).parent / "config.ini"
- 用
os.path.dirname(__file__)(兼容老版本):
import os<br>config_path = os.path.join(os.path.dirname(__file__), "config.ini")
这样得到的路径,永远相对于脚本文件本身,不依赖你从哪启动 Python。
立即学习“Python免费学习笔记(深入)”;
别踩坑:当前工作目录 ≠ 脚本所在目录
很多人误以为 open("data.txt") 是找脚本同目录的文件,其实它找的是你运行命令时所在的目录。比如:
- 脚本在
/a/b/script.py,你在/x/y下执行python /a/b/script.py,那么"data.txt"就去/x/y/data.txt找 - 结果 FileNotFoundError —— 因为文件其实在
/a/b/data.txt
所以除非你明确控制运行位置,否则少用纯相对路径字符串操作文件。
读取资源文件的小技巧
如果项目有固定结构(如 myapp/ 下有 src/ 和 data/),建议统一用脚本位置为基准构建路径:
-
data_dir = Path(__file__).parent.parent / "data"(向上两级到项目根,再进 data) db_path = data_dir / "app.db"- 后续直接用
db_path.open()或转成字符串str(db_path)
这样整个项目挪到别的机器或路径,只要内部结构不变,就完全不用改路径代码。
基本上就这些。核心就一条:别靠人眼拼路径,用 pathlib.Path 动态算,既清晰又可靠。