Python读配置文件出错的根源是工作目录与脚本目录不一致,应以__file__为基础构建绝对路径定位config.ini,确保无论从何处运行脚本都能正确读取。

核心问题不在“读取变量”,而在于“路径没对上”——Python 读配置文件时,默认以当前工作目录为起点,不是脚本所在目录。哪怕 config.ini 就放在 .py 文件旁边,只要运行位置不同,就可能报 NoSectionError 或 FileNotFoundError。
确认当前工作目录和脚本目录的区别
运行以下两行代码,立刻看清差异:
import os
print("当前工作目录:", os.getcwd())
print("脚本所在目录:", os.path.dirname(os.path.abspath(__file__)))
常见情况:
- 终端在
/project下执行python src/main.py→ 工作目录是/project - 终端在
/project/src下执行python main.py→ 工作目录变成/project/src - PyCharm 默认把工作目录设为项目根目录,容易掩盖问题
用脚本位置构建绝对路径(推荐做法)
不依赖工作目录,而是以 .py 文件自身位置为基准找配置文件:
import os
# 获取当前脚本所在目录的绝对路径
script_dir = os.path.dirname(os.path.abspath(__file__))
# 拼出同级目录下的 config.ini
config_path = os.path.join(script_dir, "config.ini")
# 然后用 configparser 安全读取
import configparser
cfg = configparser.ConfigParser()
cfg.read(config_path) # 不再用相对路径字符串
这样无论从哪启动脚本,都能准确定位到和它放在一起的配置文件。
跨多级目录访问配置文件
如果 config.ini 在项目根目录或上级目录,只需向上跳转:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 上一级:
os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - 上两级:
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
例如项目结构是:
/myproject/
├── config.ini
└── src/
└── app.py
在 app.py 中读根目录的 config.ini:
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
config_path = os.path.join(project_root, "config.ini")
验证路径是否真实存在
读取前加一行检查,避免静默失败:
if not os.path.exists(config_path):
raise FileNotFoundError(f"配置文件未找到: {config_path}")
也可以用 os.listdir(script_dir) 打印当前脚本目录下有哪些文件,快速确认 config.ini 是否真的在那里、拼写是否正确(比如是不是 config.INI 或 config.ini.bak)。

















