python读取ini和yaml配置文件应选对模块、注意编码与结构差异:ini用configparser(显式指定utf-8编码),yaml用pyyaml的safe_load();统一封装configloader类,按后缀自动解析,支持属性访问与fallback机制。

Python读取配置文件,ini 和 yaml 是两种最常用格式,选对模块、注意编码和结构差异,就能避免90%的解析问题。
读取 .ini 文件:用 configparser 标准库就够了
无需额外安装,Python 自带,适合简单键值+节(section)结构。
- 默认不支持注释和嵌套,但能处理
[section]下的key = value形式 - 推荐显式指定 encoding='utf-8',尤其 Windows 下中文容易乱码
- 读取后是类字典对象,用
config['section']['key']或config.get('section', 'key')获取值 - 若需类型自动转换(如布尔、整数),可用
config.getboolean()、config.getint()等方法
读取 .yaml 文件:推荐 PyYAML,注意安全加载
需 把不同格式的加载逻辑收拢,对外提供一致接口,方便后续扩展(比如加环境变量覆盖、热重载)。 立即学习“Python免费学习笔记(深入)”; 实际项目中高频出错点,提前避雷。pip install pyyaml</font>,支持复杂数据结构(列表、嵌套字典),但默认加载有风险。</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/ai/2077" title="Tana"><img
src="https://img.php.cn/upload/ai_manual/000/000/000/175680265491072.png" alt="Tana" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/ai/2077" title="Tana">Tana</a>
<p>“节点式”AI智能笔记工具,支持超级标签。</p>
</div>
<a href="/ai/2077" title="Tana" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div>
<ul>
<li>永远用 <code>yaml.safe_load(),不用 yaml.load() —— 后者可能执行任意代码
true/false 或 yes/no(小写)name: "张三"
统一管理建议:封装一个 ConfigLoader 类
.ini → configparser,.yml/.yaml → PyYAML
config.yaml,缺失字段再从 config.ini 补充cfg.db.host),用 types.SimpleNamespace 或第三方库如 box
常见坑与绕过方式
configparser.ExtendedInterpolation() 或换 YAML2023-01-01 为 datetime.date,如不需要,用自定义 Loader 禁用时间解析value: 表示 null,INI 写 value= 表示空字符串,语义不同,读取后需做空值判断--- 分段 + 自定义加载逻辑,或用 config_dev.yaml/config_prod.yaml 文件名区分









