加载JSON配置文件时遭遇Python FileNotFoundError的问题求助
嗨,看起来你的问题主要出在文件名拼写错误和路径处理的小细节上,咱们一步步拆解解决:
一、核心问题:文件名不匹配
你代码里写的路径是 defmet_common/configs/config.edi_db_servers.json,但从文件管理器复制的真实路径是 defmet_common\configs\config.edi.db_servers.json —— 这里的关键差异是文件名里的 edi_db 和 edi.db:一个是下划线,一个是点!
系统里真实存在的文件是带点的版本,而你代码里写的是带下划线的,这直接导致Python找不到对应的文件,这是最可能的报错原因。
二、路径分隔符的小坑(次要但需要注意)
Windows系统默认用反斜杠 \ 作为路径分隔符,而Python字符串里的反斜杠是转义字符,如果你直接复制管理器里的路径,需要把反斜杠改成双反斜杠 \\,或者直接用正斜杠 /(Python在Windows上也能识别正斜杠)。不过这个问题在你这里是次要的,核心还是文件名的错误。
三、解决方案
1. 先修正文件名
直接把代码里的路径改成真实的文件名:
# 跨平台友好的正斜杠版本 file_path = "defmet_common/configs/config.edi.db_servers.json" # 或者Windows专用的双反斜杠版本 file_path = "defmet_common\\configs\\config.edi.db_servers.json"
2. 用更可靠的路径处理方式(推荐)
建议使用Python 3.4+自带的pathlib模块来处理路径,它能自动适配不同操作系统的分隔符,还能帮你快速验证路径是否存在:
修改你的load_config函数如下:
from pathlib import Path import json def load_config(self, file_path): # 把字符串路径转为Path对象 config_file = Path(file_path) try: # 用Path对象的open方法打开文件 with config_file.open('r', encoding='utf-8') as file: data = json.load(file) self.config_data.update(data) except FileNotFoundError: # 打印绝对路径,方便你确认代码实际查找的位置 print(f"File not found: {config_file.resolve()}") except json.JSONDecodeError: print(f"Invalid JSON format: {config_file.resolve()}")
3. 验证当前工作目录
有时候你以为脚本是从某个目录运行的,但实际IDE或者终端的工作目录可能不一样。可以在代码开头加一行,确认当前工作目录:
import os print("Current working directory:", os.getcwd())
如果输出的目录不是包含defmet_common的那个目录,你可能需要调整脚本的运行路径,或者使用绝对路径来加载配置文件。
总结
先优先修正文件名里的下划线/点错误,这应该能直接解决FileNotFoundError;之后用pathlib来管理路径,可以避免很多跨平台和路径拼写的坑,也方便排查问题。
备注:内容来源于stack exchange,提问作者chani

