Python之ruamel.yaml模块详解(二)
Python之ruamel.yaml模块详解(二)
- 4 将YAML解析为Python对象并修改
- 5 使用旧API将YAML解析为Python对象并修改
- 6 使用[]和.get()访问合并的键:
- 7 使用insert()方法插入内容
- 8 使用yaml.indent()更改默认缩进
- 9 使用yaml.compact()隔行显示
- 10 同一数据使用三个转储,生成一个包含三个文档的流
- 11 将YAML输出作为字符串
- 接上文:Python之ruamel.yaml模块详解(一);
- 以下为官网的几个案例:
4 将YAML解析为Python对象并修改
import sys
from ruamel.yaml import YAMLinp = """\
# example
name:# detailsfamily: Smith # very commongiven: Alice # one of the siblings
"""yaml = YAML()
code = yaml.load(inp)
code['name']['given'] = 'Bob'yaml.dump(code, sys.stdout)
- 结果是:
# example
name:# detailsfamily: Smith # very commongiven: Bob # one of the siblings
5 使用旧API将YAML解析为Python对象并修改
from __future__ import print_functionimport sys
import ruamel.yamlinp = """\
# example
name:# detailsfamily: Smith # very commongiven: Alice # one of the siblings
"""code = ruamel.yaml.load(inp, ruamel.yaml.RoundTripLoader)
code['name']['given'] = 'Bob'ruamel.yaml.dump(code, sys.stdout, Dumper=ruamel.yaml.RoundTripDumper)# the last statement can be done less efficient in time and memory with
# leaving out the end='' would cause a double newline at the end
# print(ruamel.yaml.dump(code, Dumper=ruamel.yaml.RoundTripDumper), end='')
- 结果是:
# example
name:# detailsfamily: Smith # very commongiven: Bob # one of the siblings
6 使用[]和.get()访问合并的键:
from ruamel.yaml import YAMLinp = """\
- &CENTER {x: 1, y: 2}
- &LEFT {x: 0, y: 2}
- &BIG {r: 10}
- &SMALL {r: 1}
# All the following maps are equal:
# Explicit keys
- x: 1y: 2r: 10label: center/big
# Merge one map
- <<: *CENTERr: 10label: center/big
# Merge multiple maps
- <<: [*CENTER, *BIG]label: center/big
# Override
- <<: [*BIG, *LEFT, *SMALL]x: 1label: center/big
"""def func():yaml = YAML()data = yaml.load(inp)print(data)print(data[7]['y'])assert data[7]['y'] == 2if __name__ == "__main__":func()
- 结果是:
[ordereddict([('x', 1), ('y', 2)]),
ordereddict([('x', 0), ('y', 2)]),
ordereddict([('r', 10)]),
ordereddict([('r', 1)]),
ordereddict([('x', 1), ('y', 2), ('r', 10), ('label', 'center/big')]), ordereddict([('r', 10), ('label', 'center/big'), ('x', 1), ('y', 2)]), ordereddict([('label', 'center/big'), ('x', 1), ('y', 2), ('r', 10)]), ordereddict([('x', 1), ('label', 'center/big'), ('r', 10), ('y', 2)])]
2
- 使用
.get()
方法,如下:
from ruamel.yaml import YAMLinp = """\
- &CENTER {x: 1, y: 2}
- &LEFT {x: 0, y: 2}
- &BIG {r: 10}
- &SMALL {r: 1}
# All the following maps are equal:
# Explicit keys
- x: 1y: 2r: 10label: center/big
# Merge one map
- <<: *CENTERr: 10label: center/big
# Merge multiple maps
- <<: [*CENTER, *BIG]label: center/big
# Override
- <<: [*BIG, *LEFT, *SMALL]x: 1label: center/big
"""def func():yaml = YAML()data = yaml.load(inp)print(data)print(f"1、[]方法为:{data[7]['y']}")print(f"2、.get()方法为:{data[7].get('y')}")assert data[7]['y'] == 2if __name__ == "__main__":func()
- 结果是:
[ordereddict([('x', 1), ('y', 2)]),
ordereddict([('x', 0), ('y', 2)]),
ordereddict([('r', 10)]),
ordereddict([('r', 1)]),
ordereddict([('x', 1), ('y', 2), ('r', 10), ('label', 'center/big')]), ordereddict([('r', 10), ('label', 'center/big'), ('x', 1), ('y', 2)]), ordereddict([('label', 'center/big'), ('x', 1), ('y', 2), ('r', 10)]), ordereddict([('x', 1), ('label', 'center/big'), ('r', 10), ('y', 2)])]
[]方法为:2
.get()方法为:2
7 使用insert()方法插入内容
import sys
from ruamel.yaml import YAMLyaml_str = """\
first_name: Art
occupation: Architect # This is an occupation comment
about: Art Vandelay is a fictional character that George invents...
"""yaml = YAML()
data = yaml.load(yaml_str)
data.insert(1, 'last name', 'Vandelay', comment="new key")
yaml.dump(data, sys.stdout)
- 结果为以下,可以发现插入了数据
last name: Vandelay
first_name: Art
last name: Vandelay # new key
occupation: Architect # This is an occupation comment
about: Art Vandelay is a fictional character that George invents...
8 使用yaml.indent()更改默认缩进
- 默认情况下,
ruamel.yaml
以块样式缩进两个位置,用于映射和序列; - 对于序列,缩进计算到标量的开头,破折号位于缩进的“空格”的第一个位置;
- 可以通过例如使用
yaml.indent()
来更改此默认缩进:
import sys
from ruamel.yaml import YAMLd = dict(a=dict(b=2),c=[3, 4])
yaml = YAML()
yaml.dump(d, sys.stdout)
print('0123456789')
yaml = YAML()
yaml.indent(mapping=4, sequence=6, offset=3)
yaml.dump(d, sys.stdout)
print('0123456789')
- 结果为:
a:b: 2
c:- 3- 4
0123456789
a:b: 2
c:- 3- 4
0123456789
9 使用yaml.compact()隔行显示
- 如果一个块序列或块映射是一个序列的元素,则默认情况下会显示紧凑的符号
- 这意味着“父”序列的破折号与第一个元素resp位于同一行;
- 子集合的第一个键/值对。
- 如果希望其中一个或两个(序列内的序列,序列内的映射)从下一行开始,可以使用
yaml.compact()
:
import sys
from ruamel.yaml import YAMLd = [dict(b=2), [3, 4]]
yaml = YAML()
yaml.dump(d, sys.stdout)
print('='*15)
yaml = YAML()
yaml.compact(seq_seq=False, seq_map=False)
yaml.dump(d, sys.stdout)
- 结果是:
- b: 2
- - 3- 4
===============
-b: 2
-- 3- 4
10 同一数据使用三个转储,生成一个包含三个文档的流
import sys
from ruamel.yaml import YAMLdata = {1: {1: [{1: 1, 2: 2}, {1: 1, 2: 2}], 2: 2}, 2: 42}yaml = YAML()
yaml.explicit_start = True
yaml.dump(data, sys.stdout)
yaml.indent(sequence=4, offset=2)
yaml.dump(data, sys.stdout)def sequence_indent_four(s):# this will fail on direclty nested lists: {1; [[2, 3], 4]}levels = []ret_val = ''for line in s.splitlines(True):ls = line.lstrip()indent = len(line) - len(ls)if ls.startswith('- '):if not levels or indent > levels[-1]:levels.append(indent)elif levels:if indent < levels[-1]:levels = levels[:-1]# same -> do nothingelse:if levels:if indent <= levels[-1]:while levels and indent <= levels[-1]:levels = levels[:-1]ret_val += ' ' * len(levels) + linereturn ret_valyaml = YAML()
yaml.explicit_start = True
yaml.dump(data, sys.stdout, transform=sequence_indent_four)
- 结果是:
---
1:1:- 1: 12: 2- 1: 12: 22: 2
2: 42
---
1:1:- 1: 12: 2- 1: 12: 22: 2
2: 42
---
1:1:- 1: 12: 2- 1: 12: 22: 2
2: 42
11 将YAML输出作为字符串
- 以下是新API的实现方法:
import sys
from ruamel.yaml import YAML
from ruamel.yaml.compat import StringIOclass MyYAML(YAML):def dump(self, data, stream=None, **kw):inefficient = Falseif stream is None:inefficient = Truestream = StringIO()YAML.dump(self, data, stream, **kw)if inefficient:return stream.getvalue()yaml = MyYAML() # or typ='safe'/'unsafe' etc
print(yaml.dump(dict(a=1, b=2)))
- 旧API是如下:
yaml.dump((dict(a=1, b=2)), sys.stdout)
print() # or sys.stdout.write('\n')
相关文章:
Python之ruamel.yaml模块详解(二)
Python之ruamel.yaml模块详解(二)4 将YAML解析为Python对象并修改5 使用旧API将YAML解析为Python对象并修改6 使用[]和.get()访问合并的键:7 使用insert()方法插入内容8 使用yaml.indent()更改默认缩进9 使用yaml.compact()隔行显示10 同一数…...
若依框架 --- 偶发的el-select无法选择的问题
👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 Ǵ…...
【Linux】tmpfile 使用介绍
tmpfile 使用介绍 1 介绍 很多情况下,需要系统自动识别/tmp、/var/tmp下的临时目录,并将其自动清理其中的过期文件。这个工具就是systemd-tmpfiles。 网上很多博客使用tmpwatchcron的方法来管理临时文件和临时存放文件的目录,在后期的版本…...
实现光线追踪重投影的方法
光线追踪重投影方法 重投影这项技术一般用于时间性帧复用技术上,例如TAA(Temporal Anti-Aliasing)反走样或者抗锯齿技术。读这篇文章最好先对TAA这类技术的算法流程有了解。 1.TAA抗锯齿技术简介 先简单介绍下TAA抗锯齿的原理,在游戏中,当前…...
Hyperbolic Representation Learning for CV
Contents Hyperbolic geometry[CVPR 2020] Hyperbolic visual embedding learning for zero-shot recognitionIntroductionApproachHyperbolic Label Embedding LearningHyperbolic Image Embedding LearningExperiment[CVPR 2020] Hyperbolic Image EmbeddingsIntroduction...
In Context Learning 相关分享
个人知乎详见 https://zhuanlan.zhihu.com/p/603650082/edit 1. 前言 随着大模型(GPT3,Instruction GPT,ChatGPT)的横空出世,如何更高效地提示大模型也成了学术界与工业界的关注,因此In-context learning…...
【前端笔试题一】:解析url路径中的query参数
前言 本文记录下在笔试过程中的前端笔试编程题目,会持续更新 1. 题目: 解析 url 路径中的 query 参数,比如:‘http://building/#/skeleton?serialNumber2023020818332821073&jobNo210347&target%7B%22a%22%3A%22b%22%2C…...
K_A12_001 基于STM32等单片机采集火光火焰传感参数串口与OLED0.96双显示
K_A12_001 基于STM32等单片机采集火光火焰传感参数串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC火光火焰模块1.2、STM32F103C8T6火光火焰模块五、基础知识学习与相…...
Java基础42 枚举与注解
枚举与注解一、枚举(enumeration)1.1 自定义类实现枚举1.2 enum关键字实现枚举1.2.1 enum的注意事项1.2.2 enum的使用练习1.2.3 enum的常用方法1.2.4 enum的使用细节及注意事项1.2.5 enum练习二、注解(Annotation)2.1 Override&am…...
shell的变量和引用
文章目录二、变量和引用2.1 什么是变量2.2变量的命名2.3 变量的类型2.3.1 根据数据类型分类2.3.2 根据作用域分类2.4 变量的定义2.5 shell中的引用2.6 变量的运算练习:二、变量和引用 在程序设计语言中,变量是一个非常重要的概念。也是初学者在进行Shel…...
基于PHP的招聘网站
摘要在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括在线招聘的网络应用,在外国在线招聘已经是很普遍的方式,不过国内的在线招聘可能还处于起步阶段。招聘网站具有招聘信息功能的双向选择,…...
轻松使用 Python 检测和识别车牌(附代码)
车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计算机视觉和人工智能。 本文将使用Python创建一个车牌检测和识别程序。该程序对输入图像进行处理,检测和识别车牌,最后显示车牌字符,作为…...
DVWA—CSRF-Medium跨站请求伪造中级
注意: 1、这里对XSS(Stored)关卡不熟悉的可以从这里去看http://t.csdn.cn/ggQDK 2、把难度设置成 Medium 一、这一关同样我们需要埋下伏笔,诱使用户点击来提交,首先从XSS(Stored)入手。 注意:在前面介绍…...
【电商】后台订单生成
结合商品流转的电商系列介绍了一些了,商品已经采购入库、价格税率设置好了、活动及相关模板也已经准备完毕,下面就应该上架销售了,现在接着聊下订单的生成。 订单从产生到最终的关闭需要经历很多的环节,订单也是电商系统的核心数据…...
作为公司,这个5款在线软件工具赶紧安利起来!
2023年了 ,您的企业还没使用在线软件工具吗?自从用了在线工具之后,感觉打开了新办公世界的大门,效率蹭蹭蹭地往上涨啊。对于喜欢追求效率和便捷的我来说,在线实在是太棒了!今天安利几个非常不错的在线软件工…...
面试(七)为什么一般希望将析构函数定义为虚函数
class B { public:~B() // 基类析构函数不为虚函数{cout << "B::~B()" << endl;} };class D : public B { public:~D(){cout << "D::~D()" << endl;} };void Test(B* t) {delete t;t nullptr; }int main() {B *pb new B;Test…...
MySQL必会四大函数-时间函数
一、时间日期获取函数 获取当前日期(date)函数:curdate() mysql> select curdate(); 2023-02-09 获取当前时间(time)函数:curtime() select curtime(); 08:49:27 获取当前时间戳(date &…...
震惊!邻桌的程序猿做可视化报告竟然比我还快,带着好奇心我打开了他的电脑,发现惊天秘密,原因竟是...
其实,本文就是想分享一个做可视化的捷径! 制作可视化的方式有千千万。 Excel 控若能轻车熟路驾驭 VBA,能玩出各种花来,再不济借助图表插件外援也能秒杀一众小白选 手。 会编程的,Echarts 几十行代码,分分…...
mathtype7与word冲突,无法安装,不显示工具栏的问题解决
首先无法安装,或安装出错时,要清理注册表防止以后再次出现该问题,以此记录留作备份。打开注册表的方法是键盘winr键同时按(win就是Alt旁边像窗户图标的键),正常的话会跳出一个叫“运行”的家伙,…...
IBM AIX 升级Openssh 实现篇(编译安装)
升级成功佐证 !!!本文所有内容仅作参考,请在测试环境中具体测试完毕后才能应用于生产环境!!! [1]备份和恢复方案 开启telnet 服务,防止ssh 掉线后无法重连维护。在修复漏洞后关闭telnet。 备份该服务相关的所有文件,以便恢复。 root@TEST:/etc# vi inetd.conf #ftp…...
linux的睡眠框架及实现
睡眠 4 种模式:S2I (Suspend-to-Idle): 挂起系统,IO进入低功耗模式。需配置CONFIG_SUSPEND。Standby:执行S2I后,把AP (nonboot CPU) 离线。除了CONFIG_SUSPEND的支持外,还需要向suspend子系统注册ÿ…...
Java面试知识点
工作也有好些年了,从刚毕业到前几年看过无数的面试题,总想着自己写一个面试总结,随着自我认识的变化,一些知识点的理解也越来越不一样了。写下来温故而知新。很多问题可能别人也总结过,但是答案不尽相同,如…...
PTA Advanced 1159 Structure of a Binary Tree C++
目录 题目 Input Specification: Output Specification: Sample Input: Sample Output: 思路 代码 题目 Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, a binary tree can be un…...
CDN绕过技术总汇
注 本文首发于合天网安实验室 首发链接:https://mp.weixin.qq.com/s/9oeUpFUZ_0FUu6YAhQGuAg 近日HVV培训以及面试,有人问了CDN该如何绕过找到目标真实IP,这向来是个老生常谈的问题,而且网上大多都有,但是有些不够全面…...
算法训练营DAY51|300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
本期是求子序列的新的一期,题目前两道有一些相似之处,思路差不多,第三道有一点难度,但并不意味着第一道没有难度,没有做过该类型题的选手,并不容易解出题解。 300. 最长递增子序列 - 力扣(Leet…...
mac:彻底解决-安装应用后提示:无法打开“XXX”,因为无法验证开发者的问题;无法验证此App不包含恶意软件
mac从浏览器或其他电脑接收了应用,但是打开报错 目录报错解决办法一次性方法永久解决方法验证恢复应用验证报错 截图如下: 错误信息 无法打开“XXX”,因为无法验证开发者的问题;无法验证此App不包含恶意软件 解决办法 一次性方…...
CPU 指标 user/idle/system 说明
从图中看出,一共有五个关于CPU的指标。分别如下: User User表示:CPU一共花了多少比例的时间运行在用户态空间或者说是用户进程(running user space processes)。典型的用户态空间程序有:Shells、数据库、web服务器…… Nice N…...
Thinkphp大型进销存ERP源码/ 进销存APP源码/小程序ERP系统/含VUE源码支持二次开发
框架:ThinkPHP5.0.24 uniapp 包含:服务端php全套开源源码,uniapp前端全套开源源码(可发布H5/android/iod/微信小程序/抖音小程序/支付宝/百度小程序) 注:这个是全开源,随便你怎么开,怎么来&a…...
hgame2023 WebMisc
文章目录Webweek1Classic Childhood GameBecome A MemberGuess Who I AmShow Me Your BeautyWeek2Git Leakagev2boardSearch CommodityDesignerweek3Login To Get My GiftPing To The HostGopher Shopweek4Shared DiaryTell MeMiscweek1Where am I神秘的海报week2Tetris Master…...
67. Python的绝对路径
67. Python的绝对路径 文章目录67. Python的绝对路径1. 准备工作2. 路径3. 绝对路径3.1 概念3.2 查看绝对路径的方法4. 课堂练习5. 用绝对路径读取txt文件6. 加\改写绝对路径6.1 转义字符知识回顾6.2 转义字符改写7. 总结1. 准备工作 对照下图,新建文件夹和txt文件…...
烟台网站建设工资/长尾关键词搜索网站
在打开的系统服务窗口,确认需要删除的服务的名称,如下图所示 4 用管理员的身份运行cmd,打开cmd窗口, 输入sc delete MySQL3命令,回车 5 提示删除服务成功 6 再次在界面中确认是否删除,发现已经删除...
嘉兴商城网站开发设计/推广方案如何写
1号进程是什么 当我们使用 /bin/bash 启动一个centos的容器 docker run -it --rm centos:7 /bin/bash那么启动命令就是1号进程 [rootded49b74042c /]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.2 0.0 11836 …...
网站建设术语/外链平台有哪些
组件写好之后有的时候需要动态创建组件。例如: 编辑文章页面,正文是一个富文本编辑器,富文本编辑器是一个第三方的组件,点击添加章节的时候需要动态的创建一个富文本编辑器这个时候怎么处理呢。 富文本编辑器也就是第三方的组件&a…...
吴忠网站设计公司/四川网站seo
备份文/爱掏蜂窝的熊(简书作者)原文链接:http://www.jianshu.com/p/0b6f5148dab8著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。序 在日常开发中,app难免会发生崩溃。简单的崩溃…...
哪里有做网站企业/网店推广的方式
返回:贺老师课程教学链接 画出实现下面求解任务的流程图 1、简单循环的流程图(提示:m是一个变量,在程序中输入)(1)求1到m的倒数和,即 (2)求1到m的平方和&…...
私募基金网站开发流程/百度关键词推广帝搜软件
dplyr函数进行数据转换 筛选知识铺垫比较运算符逻辑运算符数据准备filter()函数筛选行select()函数筛选列arrange()函数排列行完整代码dplyr()函数是R语言数据分析必学的实用包之一。 本文现阶段先讲解dplyr()函数的几个常用于数据转换的函数:filter()函数、select(…...