最常用可靠的方法是用 file 配合 pathlib.Path(__file__).parent.resolve() 或 os.path.dirname(os.path.abspath(__file__)) 获取当前文件所在目录;推荐 pathlib(Python 3.4+),因其现代、可读性强、跨平台;切勿依赖 os.getcwd(),因其返回运行时工作目录而非文件所在目录。

用 __file__ 配合 os.path.dirname() 或 pathlib.Path(__file__).parent 就能拿到当前 Python 文件所在的目录路径,这是最常用、最可靠的方法。
用 pathlib(推荐,Python 3.4+)
pathlib 更现代、可读性好,跨平台无烦恼:
from pathlib import Path获取当前文件所在目录(绝对路径)
file_dir = Path(file).parent.resolve() print(file_dir) # 例如:/home/user/project/src
获取上一级目录
parent_dir = file_dir.parent
获取某个子路径(比如同级的 config.json)
config_path = file_dir / "config.json"
用 os.path(兼容老版本)
如果还在用较老的 Python 版本,os.path 同样稳定:
立即学习“Python免费学习笔记(深入)”;
import os获取当前文件所在目录(绝对路径)
file_dir = os.path.dirname(os.path.abspath(file)) print(file_dir) # 例如:C:\Users\name\project\src
拼接文件路径(推荐用 os.path.join,避免手动加斜杠)
log_path = os.path.join(file_dir, "logs", "app.log")
注意:别用相对路径或当前工作目录
os.getcwd() 返回的是“运行时的工作目录”,不是文件所在目录——容易出错,尤其用 IDE、打包工具(如 PyInstaller)或从其他路径执行脚本时:
- ✅ 正确:基于
__file__—— 总指向当前 .py 文件位置 - ❌ 危险:依赖
os.getcwd()—— 可能是桌面、项目根目录,甚至临时目录
小技巧:封装成函数复用
如果多个地方要用,可以简单封装一下:
from pathlib import Pathdef get_script_dir(): return Path(file).parent.resolve()
使用
data_dir = get_script_dir() / "data" config_file = get_script_dir() / "settings.yaml"
基本上就这些。记住核心:认准 __file__,搭配 pathlib 或 os.path 解析,不复杂但容易忽略。











