
本文详解 VS Code 中 Python 脚本无法通过相对路径(如 "movies.txt")打开同目录下文本文件的根本原因——当前工作目录(CWD)与脚本所在路径不一致,并提供 os.getcwd() 诊断、os.path.join() 安全构建路径、以及配置调试环境等专业级解决方法。
本文详解 vs code 中 python 脚本无法通过相对路径(如 `"movies.txt"`)打开同目录下文本文件的根本原因——当前工作目录(cwd)与脚本所在路径不一致,并提供 os.getcwd() 诊断、os.path.join() 安全构建路径、以及配置调试环境等专业级解决方法。
在 VS Code 中运行 Python 脚本时,常遇到如下报错:
FileNotFoundError: [Errno 2] No such file or directory: 'movies.txt'
即使 movies.txt 与 .py 文件物理上位于同一文件夹,且路径拼写完全正确,问题依然存在。这并非代码错误,而是工作目录(Current Working Directory, CWD)与脚本位置不一致导致的典型行为差异。
? 首先确认当前工作目录
Python 的 open("movies.txt", ...) 使用的是相对于当前工作目录的路径,而非相对于 Python 源文件的位置。VS Code 默认以工作区根目录作为 CWD(无论你从哪一层子目录中运行脚本)。例如:
my_project/ ← 工作区根目录(即 os.getcwd() 返回此处) ├── src/ │ └── main.py ← 你双击运行的脚本 ├── data/ │ └── movies.txt ← 你想读取的文件(与 main.py 不在同一层!)
此时若 main.py 中写 open("movies.txt", "r"),Python 会尝试在 my_project/ 下查找,而非 src/ 或 data/ —— 自然报错。
立即学习“Python免费学习笔记(深入)”;
验证方式:在脚本开头添加:
import os
print("当前工作目录:", os.getcwd())
print("脚本所在目录:", os.path.dirname(os.path.abspath(__file__)))运行后你会清晰看到二者差异,这是排查的第一步。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
✅ 推荐方案:基于脚本位置构建可靠路径
为确保跨环境(本地运行、VS Code 调试、终端执行、后续上传部署)一致性,永远不要依赖 os.getcwd() 作为文件定位依据,而应使用 __file__ 动态获取脚本位置:
import os
# 获取当前 .py 文件所在目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 构建同目录下的文件路径
file_path = os.path.join(script_dir, "movies.txt")
with open(file_path, "r", encoding="utf-8") as f:
content = f.read()
print(content)✅ 优势:
- 无论从工作区任意位置运行,路径始终指向脚本同级目录;
- 支持任意嵌套层级(3层、5层均无压力);
- 兼容 Windows/macOS/Linux 路径分隔符;
- 上传代码 + 数据文件时,只需保持相对结构不变即可。
? 小技巧:若 movies.txt 与脚本不在同一级,而在子目录(如 ./data/movies.txt),则写 os.path.join(script_dir, "data", "movies.txt");若在上一级,可用 os.path.join(script_dir, "..", "movies.txt"),再配合 os.path.normpath() 标准化路径。
⚙️ 补充:VS Code 调试配置(launch.json)
如果你使用 VS Code 的调试器(F5),可通过 launch.json 显式设置工作目录,使其与脚本对齐:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"module": "pytest",
"justMyCode": true,
"cwd": "${fileDirname}" // ? 关键:将工作目录设为当前文件所在目录
}
]
}保存后重启调试器,此时 open("movies.txt", ...) 将按脚本所在目录解析相对路径。但请注意:该设置仅影响调试模式,终端中直接 python main.py 仍需依赖 __file__ 方案——因此强烈建议优先采用 os.path.join(...) 方式,实现真正可移植的代码。
? 总结与最佳实践
- ❌ 避免假设 os.getcwd() 就是脚本目录;
- ✅ 始终用 os.path.dirname(os.path.abspath(__file__)) 定位脚本根;
- ✅ 使用 os.path.join() 拼接路径,避免硬编码 / 或 \;
- ✅ 项目组织推荐扁平化:脚本与数据文件放在合理层级(如 ./src/ 和 ./data/),并通过路径逻辑关联,而非依赖深度嵌套;
- ✅ 上传作业或协作时,提供清晰的目录结构说明(如 README.md 中注明:“请将 movies.txt 放入与 main.py 相同目录”)。
掌握这一机制,你将彻底告别“文件找得到却打不开”的困扰,写出健壮、可迁移、符合工程规范的 Python 脚本。

















