Python - 通过PyYaml库操作YAML文件
PyYaml简单介绍
- Python的PyYAML模块是Python的YAML解析器和生成器
- 它有个版本分水岭,就是5.1
读取YAML5.1之前的读取方法
def read_yaml(self, path): with open(path, encoding="utf-8") as f: result = f.read() result = yaml.load(result) return result
当你运行的时候,会报一个Warning
读取YAML 5.1之后的读取方法
因为在5.1之后,直接用load()已经过时了,需要在方法里面加一个 loader 的请求参数,如下:
def read_yaml(self, path): with open(path, encoding="utf-8") as f: result = f.read() result = yaml.load(result, Loader=yaml.FullLoader) #loader可选择BaseLoader、SafeLoader、FullLoader、UnsafeLoader return result
也可以,根据Python语法糖转换,如下:
def read_yaml(self, path): with open(path, encoding="utf-8") as f: result = f.read() result = yaml.full_load(result) return result
针对不同的需要,加载器有如下几种类型:
- BaseLoader:仅加载最基本的YAML
- SafeLoader:安全地加载YAML语言的子集。建议用于加载不受信任的输入。(safe_load)
- FullLoader:加载完整的YAML语言。避免任意代码执行。这是当前(PyYAML 5.1)默认加载器调用 yaml.load(input) (发出警告后)(full_load)
- UnsafeLoader(也称为
Loader
向后兼容性):原始的Loader代码,可以通过不受信任的数据输入轻松利用。(unsafe_load)
存储数据到YAML的方法
with open(path, "w", encoding="utf-8") as f: yaml.dump(data, f, Dumper=yaml.SafeDumper) # 可选BaseDumper、SafeDumper
封装成一个操作YAML的工具类
class YamlUtil: __instance = None def __new__(cls, *args, **kwargs): if not cls.__instance: print("YamlUtil first init") cls.__instance = super(YamlUtil, cls).__new__(cls, *args, **kwargs) return cls.__instance def read_yaml(self, path): with open(path, encoding="utf-8") as f: result = f.read() result = yaml.load(result, Loader=yaml.FullLoader) return result def write_yaml(self, path, data): with open(path, "w", encoding="utf-8") as f: yaml.dump(data, f, Dumper=yaml.SafeDumper)
yamlUtil = YamlUtil()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具