0

0

python如何读取yaml配置文件_python解析和读取yaml配置文件的教程

下次还敢

下次还敢

发布时间:2025-09-15 13:14:01

|

884人浏览过

|

来源于php中文网

原创

YAML配置文件的优势在于可读性强、结构清晰、语法简洁,适合复杂配置场景。它能直观表示嵌套数据和列表,如多数据库连接信息;相比INI或JSON,编写更高效。通过PyYAML库可轻松读取为字典或列表,便于Python操作。

python如何读取yaml配置文件_python解析和读取yaml配置文件的教程

Python读取YAML配置文件,核心在于使用

PyYAML
库,将YAML文件内容转换为Python可操作的数据结构,比如字典或列表。

import yaml

def read_yaml_config(file_path):
    try:
        with open(file_path, 'r') as f:
            config = yaml.safe_load(f)
        return config
    except FileNotFoundError:
        print(f"错误:配置文件 {file_path} 未找到")
        return None
    except yaml.YAMLError as e:
        print(f"错误:解析 YAML 文件时发生错误:{e}")
        return None

# 示例用法
config_data = read_yaml_config('config.yaml')
if config_data:
    print(config_data)

YAML文件读取后,就可以像操作普通字典或列表一样使用其中的数据了。

YAML配置文件的优势是什么?

YAML相比于传统的INI或JSON,可读性更强,结构更清晰,更适合用于复杂的配置场景。例如,可以方便地表示嵌套的配置项,或者包含列表的配置。而且,YAML的语法也相对简洁,减少了不必要的字符,提升了编写效率。想象一下,你要配置一个包含多个数据库连接信息,每个连接信息又包含host、port、username、password等字段的场景,用YAML来描述就会非常直观。

立即学习Python免费学习笔记(深入)”;

如何处理YAML文件中的环境变量

绘蛙
绘蛙

电商场景的AI创作平台,无需高薪聘请商拍和文案团队,使用绘蛙即可低成本、批量创作优质的商拍图、种草文案

下载

有时候,我们希望在YAML配置文件中使用环境变量,比如数据库密码,避免硬编码

PyYAML
本身不直接支持环境变量的解析,但我们可以通过一些技巧来实现。一种方法是在读取YAML文件后,手动替换其中的环境变量。

import os
import yaml

def resolve_env_variables(config):
    if isinstance(config, dict):
        for key, value in config.items():
            if isinstance(value, str) and value.startswith("${") and value.endswith("}"):
                env_var = value[2:-1]
                config[key] = os.environ.get(env_var, value) # 如果环境变量不存在,则使用原始值
            elif isinstance(value, (dict, list)):
                resolve_env_variables(value)
    elif isinstance(config, list):
        for item in config:
            if isinstance(item, str) and item.startswith("${") and item.endswith("}"):
                env_var = item[2:-1]
                item = os.environ.get(env_var, item)
            elif isinstance(item, (dict, list)):
                resolve_env_variables(item)
    return config

def read_yaml_config_with_env(file_path):
    config = read_yaml_config(file_path)
    if config:
        config = resolve_env_variables(config)
    return config

# 示例
config_data = read_yaml_config_with_env('config.yaml')
if config_data:
    print(config_data)

这个方法会递归地遍历整个配置,如果发现字符串以

${
开头,以
}
结尾,就尝试从环境变量中获取对应的值。

读取YAML时遇到

yaml.constructor.ConstructorError
怎么办?

这个错误通常发生在YAML文件中包含Python对象,而

PyYAML
默认情况下不会加载这些对象,为了安全考虑。如果你确定YAML文件是可信的,并且需要加载其中的Python对象,可以使用
yaml.unsafe_load
代替
yaml.safe_load
。但是,请注意,这可能会带来安全风险,因为它可以执行YAML文件中包含的任意Python代码。

import yaml

def read_yaml_config_unsafe(file_path):
    try:
        with open(file_path, 'r') as f:
            config = yaml.unsafe_load(f)
        return config
    except FileNotFoundError:
        print(f"错误:配置文件 {file_path} 未找到")
        return None
    except yaml.YAMLError as e:
        print(f"错误:解析 YAML 文件时发生错误:{e}")
        return None

更安全的方法是避免在YAML文件中存储Python对象,而是使用基本的数据类型,比如字符串、数字、布尔值等。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

547

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

335

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

338

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

225

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

138

2026.02.12

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号