Python中如何返回上一级目录?跨目录读取文件报错求助
解决相对路径访问文件的FileNotFoundError问题
你遇到的是Python相对路径解析的常见坑——Python的相对路径是基于当前工作目录(也就是你启动脚本时所在的目录),而不是你写代码的脚本文件所在的目录!
先明确你的目录结构:
- 项目根目录
- bot_data/
- users_info.json
- cogs/
- economy.py
- bot_data/
你写的../bot_data/users_info.json是站在economy.py的位置往上级找,但如果你的启动脚本是从项目根目录运行的(比如执行python main.py,main.py在根目录),那当前工作目录是根目录,这时候../会指向根目录的上级文件夹,自然找不到bot_data。
给你两个靠谱的解决方案:
方案一:基于脚本位置构建绝对路径(推荐)
这种方法完全不依赖工作目录,不管你从哪里启动程序都能精准找到文件。
用os模块实现:
import os import json # 获取economy.py所在的绝对目录 current_script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接出users_info.json的路径:上级目录 -> bot_data -> users_info.json target_file = os.path.join(current_script_dir, "../bot_data/users_info.json") # 把路径转为绝对路径,避免层级解析问题 target_file = os.path.abspath(target_file) with open(target_file) as f: users_info = json.load(f)
用pathlib实现(Python 3.4+更简洁):
from pathlib import Path import json # 获取当前脚本的绝对路径 current_script = Path(__file__).resolve() # 往上跳一级到项目根目录,再找到bot_data下的文件 target_file = current_script.parent.parent / "bot_data" / "users_info.json" with open(target_file) as f: users_info = json.load(f)
方案二:使用相对于工作目录的路径(仅固定从根目录启动时可用)
如果你的程序永远从项目根目录启动,那直接用根目录下的相对路径就行:
import json with open("bot_data/users_info.json") as f: users_info = json.load(f)
但这个方法局限性很大,一旦有人从其他目录启动程序,就会再次报错,所以更推荐方案一。
内容的提问来源于stack exchange,提问作者Mihai
相关产品推荐
相关产品推荐

