范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

PyYAML实用的使用技巧

  作者:Reorx’s Forge
  中文版:https://reorx.com/blog/python-yaml-tips-zh
  英文版:Tips that may save you from the hell of PyYAML
  YAML 是一个被广泛使用的数据序列化和配置语言,作为一个开发者,总是不免和它打交道。 但处理 YAML 文档,尤其是使用 PyYAML 的过程总是非常痛苦。
  这篇文章分享我在 Python 下使用 PyYAML 的技巧和代码片段,并介绍几个相关的库。
  注意:本文中的代码仅保证在 Python 3 下正常工作  总是使用 safe_load/safe_dump
  PyYAML 的  load   函数可以构造任意 Python 对象(Pickle 协议),这意味着一次 load   可能导致任意 Python 函数被执行。
  为了确保应用程序的安全性,尽量在任何情况下使用  yaml.safe_load   和 yaml.safe_dump  。保留字段顺序
  Python 3.7+ 中, dict   keys 具备保留插入顺序的特性,所以通过 yaml.safe_load   得到的 dict  ,其 keys 顺序会与原始文件保持一致。>>> import yaml >>> text = """--- ... c: 1 ... b: 1 ... d: 1 ... a: 1 ... """ >>> d = yaml.safe_load(text) >>> d {"c": 1, "b": 1, "d": 1, "a": 1} >>> list(d) ["c", "b", "d", "a"]
  当把  dict   导出为 YAML 字符串时,为 yaml.safe_dump   传递 sort_keys=False   来保留 keys 的顺序。>>> print(yaml.safe_dump(d)) a: 1 b: 1 c: 1 d: 1 >>> d["e"] = 1 >>> print(yaml.safe_dump(d, sort_keys=False)) c: 1 b: 1 d: 1 a: 1 e: 1
  如果 Python 版本较低,或者你想确保代码能在更广泛的环境下工作,你可以使用 oyaml 库来代替 PyYAML 的  yaml   包。>>> import oyaml as yaml >>> d = yaml.safe_load(text) >>> d OrderedDict([("c", 1), ("b", 1), ("d", 1), ("a", 1)]) >>> d["e"] = 1 >>> print(yaml.safe_dump(d, sort_keys=False)) c: 1 b: 1 d: 1 a: 1 e: 1 优化列表项的缩进
  默认情况下,PyYAML 输出的列表缩进与其父元素一致。 >>> d = {"a": [1, 2, 3]} >>> print(yaml.safe_dump(d)) a: - 1 - 2 - 3
  这并不是很好的格式,根据 Ansible 和 HomeAssistant 等 YAML 书写规范,列表项应该缩进 2 空格。
  这种格式也会对导致列表项不会被如 VSCode 等编辑器识别,进而无法使用编辑器的折叠功能。
  要解决这个问题,使用如下代码片段,在代码中定义  IndentDumper   class:class IndentDumper(yaml.Dumper):     def increase_indent(self, flow=False, indentless=False):         return super(IndentDumper, self).increase_indent(flow, False)
  然后将它传递给  yaml.dump   的 Dumper   关键字参数。>>> print(yaml.dump(d, Dumper=IndentDumper)) a:   - 1   - 2   - 3
  注意,  yaml.safe_dump   由于有自己的 Dumper class,传递此参数会造成冲突。 输出可读的 UTF-8 字符
  默认情况下,PyYAML 假设你希望输出的结果里只有 ASCII 字符。 >>> d = {"a": "你好"} >>> print(yaml.safe_dump(d)) a: "你好"
  这会让输出结果非常难以阅读。
  在 UTF-8 足够普及的今天,直接输出 UTF-8 字符是非常安全的。 因此我们可以将  allow_unicode=True   传入 yaml.safe_dump   使 PyYAML 将 Unicode 转换成 UTF-8 字符串。>>> print(yaml.safe_dump(d, allow_unicode=True)) a: 你好 一些 YAML 相关的库oyaml
  Link: https://github.com/wimglenn/oyaml
  正如上文中提到的,oyaml 是  yaml   包的替换品,使 dict   keys 的顺序在 dump/load 的时候得以保留。
  oyaml 是一个单文件库,只有 53 行代码,因此使用起来非常灵活,你可以直接把它的代码复制到自己的项目中,然后根据自己的需求进行修改。 strictyaml
  Link: https://github.com/crdoconnor/strictyaml
  有的人说 YAML 过于复杂和灵活,不是一个好的配置语言。但我认为这不是 YAML 的问题,而是使用方式的问题。如果我们限制程序只使用 YAML 的部分功能,YAML 其实可以变得像它设计的那般好用。
  这就是 StrictYAML 的设计意图,它是一个类型安全的 YAML 解析器,实现了 YAML 规范说明中的一个子集 。
  如果你对 YAML 的输入输出有较强的安全考虑,建议使用 StrictYAML 代替 PyYAML。
  顺带一提的是,StrictYAML 的文档站有很多关于设计细节和配置语言思考的文章,非常值得一看。 ruamel.yaml
  Link: https://yaml.readthedocs.io/en/latest/overview.html
  ruamel.yaml 是 PyYAML 的一个分叉,于 2009 年发布并持续维护至今。
  ruamel.yaml 的文档里详细说明了它和 PyYAML 的差异。 总体来说,ruamel.yaml 专注在 YAML 1.2 上,对一些语法进行了优化。
  ruamel.yaml 最令我感兴趣的特性是输入输出的 "round-trip",可以最大程度地保留输入源的原始格式。官方文档中的定义是这样的: A round-trip is a YAML load-modify-save sequence and ruamel.yaml tries to preserve, among others:
  comments
  block style and key ordering are kept, so you can diff the round-tripped source
  flow style sequences ( ‘a: b, c, d’) (based on request and test by Anthony Sottile)
  anchor names that are hand-crafted (i.e. not of the form  idNNN  )
  merges in dictionaries are preserved
  如果你有尽可能保留原始格式的需求,建议使用 ruamel.yaml 代替 PyYAML。
  在使用中我注意到 ruamel.yaml 的 safe load 方法 (  YAML(typ="safe").load  ) 与 PyYAML 有些不同,它无法解析 flow style 的集合定义 (如  a: {"foo": "bar"}  ),这点没有在文档中提及,使用时须多加注意。 总结
  YAML 有它好的地方和坏的地方。它易于阅读,初期的学习曲线非常平缓。 但 YAML 的规范说明非常复杂,不仅造成了使用中的混乱,也使不同语言的实现在很多细微的地方难以保持一致。
  尽管有这些小毛病,YAML 仍然是我心中最好的配置语言。希望这篇文章所介绍的技巧能够帮助你避免问题,获得更好的开发和使用体验。

关于唐医生的一切渣男老公太软弱,唐医生被欺骗关于唐医生的一切渣男老公太软弱,唐医生被欺骗本文由娱乐乐可不可原创,如果你们喜欢的话,欢迎点赞和关注哦!电视剧关于唐医生的一切正在火热播出中,是由秦岚和魏大勋领衔主演的电视剧,讲述8位嫁给打工人的女星,比起嫁入豪门,她们的婚姻更踏实长久以来,女明星和豪门似乎是标配,除了嫁给有名气的圈内人,女明星大概率会成为豪门公子或者商业大佬的贤内助。也有明星不走寻常路,长得花容月貌却不愿意嫁入豪门,正是因为经历过许多趟浑水苏有朋,凭什么这么多年过去了,仍然出现在娱乐圈1988年对于苏有朋来说,是人生转折的重要一年,这一年,苏有朋以全校第一的成绩考入台北市立建国高级中学,也是这一年,15岁的苏有朋作为小虎队的一员正式出道进入娱乐圈,团队专辑逍遥游郭碧婷嫁入豪门被向太控制,被向佐吓哭不敢反驳,她图什么?郭碧婷嫁给向佐真的幸福吗向佐和向太的这些举动,让我瞬间明白为什么郭碧婷会选择嫁给他,在综艺上向佐因为连续走错路,让他火冒三丈猛踩油门。在狭小的道路飞速穿行,即便郭碧婷被吓哭,向佐也原来西游记里还隐藏了这么多知名演员连奥运冠军都曾参演上世纪八十年代央视播出的电视剧西游记,是我国第一部由改编古典四大名著而创作的大型电视剧,由杨洁导演执导,由六小龄童迟重瑞徐少华马德华闫怀礼等演员出演。老版西游记已经成为了中国电视剧华为大动作!售价31。98万起,AITO问界M7亮相!搭载鸿蒙智能座舱,手机APP还能全部上车谋求突围的华为,在汽车领域的动作备受市场关注。7月4日,深圳南山区深圳湾体育中心数百人冒雨前来,为了一睹华为发布的夏季新品,包括Nova10全屋智能等系列终端新品,最受关注的莫过于夜读人生最大的修行别让孝心迟到来源人民论坛网编辑王珂(实习)本文系转载,如有版权问题请联系productchina。org。cn父母者,人之本也。他们对子女的爱,是世界上最笨拙的给予,不善言辞,却深如大海。可是2022广汉西服定制,你的结婚西装应该这样选随着国内疫情的逐步稳定,在如今也终于迎来了结婚的热潮。期待了这么久,我们终于可以放心的筹备自己的婚礼,2022年,你的结婚西装应该怎么选呢?SUITISM修绅西服定制教你如何定制一星汉灿烂定档07。05,疑商夫妇甜虐交织,成就佳话,令人期待夏日鉴片官古装传奇电视剧星汉灿烂终于官宣定档0705,由费振翔执导,根椐自关心则乱的小说星汉灿烂,幸甚至哉改编,吴磊赵露思郭涛曾黎等主演,主要讲述程家女名少商,因战乱自幼被父母留在1978年李云龙原型去世,离婚惊动中央,临终遗愿前妻不许参加婚礼2005年9月12日,中央电视台播出了一档由李幼斌张光北何政军等人主演的战争题材剧。也就是后来一直广为流传的经典电视剧亮剑。在这部电视剧当中,独立团团长李云龙,从抗日战争到解放战争朱小伟与陈萌甜蜜逛街,陈亚男穿露脐装跳甩头舞,网友后悔了吧自从大衣哥儿子朱小伟与陈亚男离婚后,关于他的感情生活便成为众人关注的焦点。大衣哥看儿子每天意志消沉,数次找媒婆给儿子找对象,想要用一段新的感情让小伟从陈亚男的情伤中走出。在数次相亲
出口翻倍新能源汽车目前已成为中国智能制造新名片来源央视网央视网消息新能源汽车目前已成为中国智能制造新名片。中国汽车工业协会最新的信息显示2023年,新能源汽车继续免征车辆购置税,企业在新能源汽车产品方面进一步发力,预计2023跨境旅行全面开启!泰国新加坡成最热目的地,上海武汉等城市预订海外酒店最多极目新闻记者刘微通讯员张大伟2023年1月8日0时17分,自加拿大多伦多始发的南航CZ312航班落地广州白云机场,成为中国三年来首次全面放开入境限制后的首个入境航班,全体航班旅客无一下雪,全中国能比她还好玩的地方就没几个了大家好啊(),今天值班的是每年冬天都要去东北的磊磊。作为一个纯正的浙江人,我小时候对北方冬天的最早印象,其实来源于电视上哈尔滨冰雪大世界的广告。哪怕之后因为春晚小品,盘腿热炕红绿棉上海5个小众古镇,李安色戒的取景地就在这!千万不可错过头条创作挑战赛枫泾镇?头条免费正版图说起上海,你最先想到的是不是纸醉金迷的夜生活?高楼大厦?所以当我在后台看到网友留言想去看看上海的古镇,能不能推荐一下。我先一愣,感觉古风和魔都有兵不血刃晋级4强,但海港真正的考验才刚开始两回合总比分8比0拿下成都蓉城,海港队晋级足协杯四强可谓是兵不血刃。不过,球队上下都非常清楚想要夺冠,真正的考验将从下一场开始。半决赛,海港队将面临四外援齐整的浙江队一旦迈过这道坎曼联推出罗纳尔多规则,C罗我都已经离开了,还不放过我!据英媒透露,埃里克滕哈赫治下的曼联将实施罗纳尔多规则,新签约的球员周薪不能超过20万英镑。曼联主帅滕哈格曼联试图通过强制实施工资帽来避免更衣室里的!收入水平严重不平衡引起的嫉妒文化仙剑奇侠传三,主角名字竟全是中草药,其中她的名字最具宿命感娱乐圈考古记有人说,仙剑三,开了中国古偶仙侠剧的先河,可是开了这个先河之后,此后十多年,也没有出现能超越它的经典。首先是各个角色的名字,后来的仙侠剧,名字都是怎么狗血,怎么玛丽苏怎对战老东家马尔卡宁献上8次暴扣,公牛会后悔当初放他离开吗?在那些阿尔图拉斯卡尼索瓦斯(公牛队篮球运营副总裁)可能希望重新再做一次的交易当中,放走劳里马尔卡宁不可能进入前三。如果周六晚上(当地时间)你看到这位前公牛队的大个子在芝加哥公牛队以回望2022,是悲凉,还是希望勃发回望2022,似乎满眼悲凉,但把历史的时间比例尺拉大,或许有另一番模样,2022,韦伯望远镜抵达拉格朗日L2点,并顺利展开投入工作,它是宇宙探索的史诗级装备,它在接下来数十年里将带Nature在柔性基材上低成本3D打印进行铜的直接激光刻版长三角G60激光联盟导读釜山国立大学研究人员在柔性基材上对铜(Cu)进行直接激光制模的研究以CopperlaserpatterningonaflexiblesubstrateusiCES2023消费级3D打印机风向标,不只是快当地时间1月8日,2023CES国际消费电子展在美国拉斯维加斯正式落幕。作为世界上最具影响力的技术盛会,该活动的主题包括5G加密货币和区块链人工智能机器人和无人机Web3和元宇宙等