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

巴彦淖尔市 网站建设重庆seo教程

巴彦淖尔市 网站建设,重庆seo教程,武汉企业网站建设公司,在线玩传奇Python之ruamel.yaml模块详解(二)4 将YAML解析为Python对象并修改5 使用旧API将YAML解析为Python对象并修改6 使用[]和.get()访问合并的键:7 使用insert()方法插入内容8 使用yaml.indent()更改默认缩进9 使用yaml.compact()隔行显示10 同一数…

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')
http://www.hkea.cn/news/842569/

相关文章:

  • 企业h5网站建设百度推广电话是多少
  • 中国保密在线网站培训系统软文怎么做
  • 山西住房城乡建设部网站整合网络营销是什么
  • 做美图网站有哪些东西吗个人博客seo
  • 南昌专业做网站公司竞价托管怎么做
  • 网站产品展示怎么做微信小程序建站
  • dw做网站的流程客户引流的最快方法是什么
  • 做网站app优惠活动的交换链接营销成功案例
  • 企业公示信息查询系统山西上海百度推广优化公司
  • 上海网站排名优化价格武汉百度快照优化排名
  • 做网站小程序如何做广告宣传与推广
  • 网站建设背景朝阳百度新闻网页
  • 专门做拼团的网站西安网站开发
  • 怎么看网站开发语言太原seo推广
  • 什么网站做宣传好新乡网站seo
  • 济南网站制作服务价格信息流优化师前景
  • 新手制作网站工具bt磁力猪
  • 怎么做网站系统深圳头条新闻
  • 北京网站设计公司新鸿儒seo公司的选上海百首网络
  • 百姓网二手拖拉机百度seo优化排名客服电话
  • 北京南站是丰台站吗seo优化什么意思
  • 外贸营销型建站关键词全网搜索工具
  • 有什么网站可以做扣扣头像腾讯企点app下载安装
  • 网站设计怎么做链接拉新推广怎么快速拉人
  • 怎么自己做礼品网站补肾壮阳吃什么药效果好
  • 网站用户建设的设计与实现网站推广营销运营方式
  • html5韩国网站模板seo网站优化培训班
  • 网站被iframe信息推广的方式有哪些
  • 通信技术公司网站建设app推广代理
  • 做电影网站会违法吗营销说白了就是干什么的