当前位置: 首页 > news >正文

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117)
在这里插入图片描述
出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码:
在这里插入图片描述
放弃yaml.dump,又切回yaml.safe_dump。后面发现它只支持基本的数据类型,对于自定义对象或某些复杂对象(如 NumPy 数组、自定义类实例等),不知道如何序列化。

检查序列,确实存在数组:
在这里插入图片描述
改成intlist即可,具体可以参考下面的代码:

# 对象定义自定义的表示器(representer),序列化自定义对象####################
# numpy类型
import yaml
import numpy as npdef numpy_representer(dumper, data):return dumper.represent_list(data.tolist())yaml.add_representer(np.ndarray, numpy_representer)
data = {'array': np.array([1, 2, 3])}
with open('output.yaml', 'w') as f:yaml.dump(data, f)####################
# class类型
import yaml
class MyClass:def __init__(self, value):self.value = valuedef myclass_representer(dumper, data):return dumper.represent_scalar('tag:yaml.org,2002:str', str(data.value))yaml.add_representer(MyClass, myclass_representer)
data = {"my_object": MyClass(117),"other_data": [1, 2, 3]}
with open('output.yaml', 'w') as f:yaml.dump(data, f)

错误二:yaml.composer.ComposerError: expected a single document in the stream

在用yaml.dump写入**.yaml文件时,会用 “—**” 做分隔,如下所示:

# 文档1
key1: value1
---
# 文档2
key2: value2

直接用yaml.load读取会报错:
在这里插入图片描述
是因为PyYAML 库,默认情况下 yaml.safe_load()yaml.load() 只会加载第一个文档。

需要加载所有文档,可以使用 yaml.safe_load_all()yaml.load_all()

import yaml# 对于单个文档
with open('file.yaml', 'r') as f:data = yaml.safe_load(f)  # 只加载第一个文档# 对于多个文档
with open('file.yaml', 'r') as f:documents = list(yaml.safe_load_all(f))  # 加载所有文档chain_map = ChainMap(*documents)merged_dict = dict(chain_map)

相关文章:

  • 相关类可视化图像总结
  • nuclio的配置文件yaml和docker compose的yaml的区别
  • springboot根据部署服务器生成机器码+加密生成到期时间授权码设置项目在服务器的到期时间
  • Vue3+Pinia+TS笔记
  • 【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
  • 怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
  • Robots.txt 文件
  • 日本本社企业直招|Java /cobol/C#/PM/PL/Salesforce/AWS/SAP 等,正社员/個人事業主,高度人才+20 分
  • c# 局部函数 定义、功能与示例
  • C#学习第29天:表达式树(Expression Trees)
  • 深度学习:小米 MiMo-VL 技术报告学习
  • Delivering Arbitrary-Modal Semantic Segmentation(CVPR2023)任意模态语义分割论文阅读
  • 鸟巢邂逅 3D 全景漫游,一场科技与建筑的梦幻交织​
  • 基于ThinkPHP8.*的后台管理框架--Veitool框架学习使用
  • 网络安全等级保护中关于SSL证书的整改如何处理?
  • Python爬虫(三):BeautifulSoup库
  • Spring类型转换融入IOC生命周期
  • 一款 AI 驱动的 Wiki 知识库
  • macOS 终端智能代理检测
  • Oracle查询表空间大小
  • 网站建设工作量评估报价表/艾瑞指数
  • 自己做菠菜网站/百度地图3d实景地图
  • 衡水做wap网站/志鸿优化设计答案
  • phpwind 做的网站/seo排名优化怎样
  • 学校网站建设自查报告/足球比赛统计数据
  • 公益网站模板/网络营销客服主要做什么