python怎么得到文件所在路径

最常用可靠的方法是用 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 同样稳定:

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 Path

def get_script_dir(): return Path(file).parent.resolve()

使用

data_dir = get_script_dir() / "data" config_file = get_script_dir() / "settings.yaml"

基本上就这些。记住核心:认准 __file__,搭配 pathlibos.path 解析,不复杂但容易忽略。