如何获取Python执行脚本的目录路径(非os.getcwd())及检测同目录文件
获取Python脚本自身所在目录的正确方式
这个问题我之前也踩过坑,os.getcwd()确实完全不符合需求——它返回的是你执行脚本时的工作目录,和脚本实际存放的位置毫无关系。要获取脚本自身的目录,核心是利用Python内置的__file__属性,结合路径处理模块来实现,下面给你两种靠谱的方案:
方案1:使用传统的os.path模块
这是兼容所有Python版本的经典写法,逻辑清晰易懂:
import os # 第一步:获取脚本的绝对路径(不管执行时在哪,都能拿到脚本的真实路径) script_abs_path = os.path.abspath(__file__) # 第二步:提取脚本所在的目录 script_dir = os.path.dirname(script_abs_path) # 接下来检测同目录下的siblingScript.py sibling_script_path = os.path.join(script_dir, "siblingScript.py") if os.path.isfile(sibling_script_path): print("✅ siblingScript.py 存在于脚本目录中") else: print("❌ siblingScript.py 不在脚本目录里")
为什么这能行?
__file__是Python为脚本文件提供的内置属性,会返回当前脚本的路径(可能是相对路径,所以用os.path.abspath()转成绝对路径)os.path.dirname()会从完整路径中剥离文件名,只留下目录部分os.path.join()负责安全拼接路径,避免手动拼字符串出现跨平台问题(比如Windows的\和Linux的/)
方案2:使用Python 3.4+的pathlib模块(推荐)
如果你用的是Python 3.4及以上版本,pathlib提供了更优雅的面向对象路径操作,代码更简洁:
from pathlib import Path # 获取脚本所在目录:resolve()转绝对路径,parent取父目录(也就是脚本所在目录) script_dir = Path(__file__).resolve().parent # 检测同目录文件 sibling_script = script_dir / "siblingScript.py" # 直接用/拼接路径,非常直观 if sibling_script.is_file(): print("✅ siblingScript.py 存在") else: print("❌ siblingScript.py 不存在")
这种写法更符合现代Python的风格,可读性和维护性都更好,还自带跨平台支持,不用再操心路径分隔符的问题。
注意事项
- 这两种方法仅适用于作为脚本执行的场景,如果你在Python交互式环境(比如ipython、python shell)里运行,
__file__属性会不存在,会报错——但你的需求是执行脚本,所以完全没问题。
内容的提问来源于stack exchange,提问作者Jay Jung




