VS Code中Python无法打开同目录TXT文件(仅工作区顶层相对路径有效)
解决VS Code中Python读取嵌套文件的FileNotFoundError问题
问题描述
执行以下Python代码时触发FileNotFoundError: [Errno 2] No such file or directory:'movies.txt':
with open("movies.txt", "r", encoding= "utf-8") as movies:
推测问题源于VS Code工作区的文件嵌套设置(文件位于主工作区文件夹下3层),需解答以下疑问:
- 有没有修复方法?
- 是否应该停止使用嵌套文件?
- VS Code允许的文件嵌套层数是多少?
- 新手应遵循哪些文件组织最佳实践?
已尝试的排查操作
- 确认文件与代码在同一目录
- 重命名文件
- 将文件移至其他目录测试
- 用独立代码+同目录TXT文件测试,问题复现
- 使用完整文件路径可正常读取,但需要相对路径以便后续上传
- 重启VS Code及电脑
- 更新launch.json文件
- 咨询ChatGPT 3.5
- 禁用近期安装的扩展
- 通过命令行用Python可正常读取该TXT文件
- 将Python文件和TXT文件移至工作区顶层,代码可正常运行
- 删除并重置工作区文件夹
- 将包含文件的直接文件夹添加至工作区
修复方法
方法1:调整VS Code运行工作目录
打开运行和调试面板(Ctrl+Shift+D),若没有launch.json文件则点击「创建launch.json文件」并选择Python环境,在配置中添加"cwd": "${fileDirname}",确保Python运行时的工作目录是当前代码文件所在目录。示例配置:
{ "version": "0.2.0", "configurations": [ { "name": "Python: 当前文件", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal", "cwd": "${fileDirname}" } ] }
保存后重新运行代码,此时相对路径会基于代码文件所在目录解析。
方法2:在代码中动态拼接路径
如果不想修改launch.json,可通过__file__获取当前脚本路径,动态拼接目标文件的正确路径:
import os # 获取当前脚本所在目录 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 movies: # 后续操作逻辑
疑问解答
是否应停止使用嵌套文件?
不需要。合理的文件嵌套是良好项目结构的一部分,按功能、模块划分目录层级能让项目更清晰易维护。问题根源不是嵌套层数,而是VS Code默认的运行工作目录设置。
VS Code允许的文件嵌套层数是多少?
VS Code本身没有限制文件嵌套层数,操作系统的文件系统可能有路径长度限制(比如Windows默认260字符),但日常开发中3层嵌套完全在合理范围内,不会触发问题。
新手文件组织最佳实践
- 按功能/模块划分目录:比如把数据处理脚本放在
data_processing/,配置文件放在config/,资源文件(如txt、csv)放在对应脚本目录或统一的resources/目录 - 保持工作区根目录简洁:不要把所有文件堆在顶层,避免后期文件过多难以管理
- 统一资源文件存放规则:若多个脚本共用同一资源文件,可放在项目根目录下的
assets/或data/目录,通过相对路径引用 - 避免过深嵌套:建议嵌套层数不超过5层,过深的目录结构会增加路径引用复杂度,也不利于快速定位文件
内容的提问来源于stack exchange,提问作者Helen Frost
相关产品推荐
相关产品推荐

