安装:

pip install pyyaml

使用详解:

YAML 5.1之后的读取方法:

因为在5.1之后,直接用load()已经过时了,需要在方法里面加一个 loader 的请求参数,如下:

def read_yaml(self, path):withopen(path, encoding="utf-8") as f:result = f.read()result = yaml.load(result, Loader=yaml.FullLoader) #loader可选择BaseLoader、SafeLoader、FullLoader、UnsafeLoaderreturnresult

也可以,根据Python语法转换,如下:

def read_yaml(self, path):withopen(path, encoding="utf-8") as f:result = f.read()result = yaml.full_load(result)return result

针对不同的需要,加载器有如下几种类型:

  1. BaseLoader: 仅加载最基本的YAML

  1. SafeLoader: 安全地加载YAML语言的子集。建议用于加载不受信任的输入(safe_load)

  1. FullLoader: 加载完整的YAML语言。避免任意代码执行。这是当前(PyYAML 5.1)默认 加载器调用 yaml.load(input) (发出警告后)(full_load)

  1. UnsafeLoader(也称为Loader向后兼容性):原始的Loader代码,可以通过不受信任的数据输入轻松利用。(unsafe_load) 

加载YAML [ 反序列化 ]

注意⚠️,在5.1之后如果要使用yaml.load的时候就需要 + Loader参数来使用加载器

yaml.load(): 该方法返回一个Python对象

yaml.load(result, Loader=yaml.FullLoader) # 加载完整的YAML语言

yaml.load_all():

如果字符串或者文件中包含多个YAML文档,那么可以使用 yaml.load_all 函数将它们全部反序列化,得到的是一个包含所有反序列化后的YAML文档的生成器对象:

yaml.load_all(document, Loader=yaml.FullLoader) 

转储YAML

with open(path, "w", encoding="utf-8") as f:yaml.dump(data, f, Dumper=yaml.SafeDumper) # 可选BaseDumper、SafeDumper 

YAML语法【常用的】

# YAML中使用‘#’ 来表示注释(‘#’前面要有一个空格)

块序列: [ 反序列化对应的是 list]

使用破折号(dash) - 后跟一个空格(Space)来表示序列中的项。

单块序列【list】:

- id
- name
- age
with open('yaml文件地址', encoding="utf-8") as f:result = f.read()result = yaml.load(result, Loader=yaml.FullLoader)print(result)['id', 'name', 'age']

多块序列【嵌套list】:

在嵌套的块序列中,内层的序列可以直接从当前行开始而不必从新的一行开始

- - Python- Ruby- JavaScript- PHP
- - Unix- Linux- Windows
with open('yaml文件地址', encoding="utf-8") as f:result = f.read()result = yaml.load(result, Loader=yaml.FullLoader)print(result)[['Python', 'Ruby', 'JavaScript', 'PHP'], ['Unix', 'Linux', 'Windows']]

块映射:[ 反序列化对应的是 dict]

块内容中,使用冒号 : 后跟一个空格来分隔映射中的键和值。

初级样式:[ 普通的dict ]

name: bob
age: 28
gender: Male{'name': 'bob', 'age': 28, 'gender': 'Male'}

复杂样式:

复杂的键使用问号 ? 后跟一个空格来表示,如下所示

? !!python/tuple [0, 0]
: Start
? !!python/tuple [3, 5]
: End{(0, 0): 'Start', (3, 5): 'End'}  # 列表不能成为键

嵌套样式:[ 字典 嵌套 字典]

Employee:Job_title: EmployeeSalary: 5000Annual Leave: 10
Manager:Job_title: ManagerSalary: 8000Annual Leave: 15{'Employee': {'Job_title': 'Employee', 'Salary': 5000, 'Annual Leave': 10},'Manager': {' Job_title': 'Manager', 'Salary': 8000, 'Annual Leave': 15}}

块映射可以嵌套在块序列 [ list 嵌套 字典]:

- name: PyYAMLstatus: 4license: MITlanguage: Python
- name: PySyckstatus: 5license: BSDlanguage: Python[{'name': 'PyYAML', 'status': 4, 'license': 'MIT', 'language': 'Python'},{'name': 'PySyck', 'status': 5, 'license': 'BSD', 'language': 'Python'}]

块映射 嵌套 块序列中:[ 字典 嵌套 列表 ]

Programing Languages:
- Java
- Swift
- C++
- Go
Operation System:
- Unix
- Linux
- Windows
- OSX{'Programing Languages': ['Java', 'Swift', 'C++', 'Go'],'Operation System': ['Unix', 'Linux', 'Windows']}

封装成一个操作YAML的工具类

class YamlUtil:__instance = Nonedef __new__(cls, *args, **kwargs):if not cls.__instance:print("YamlUtil first init")cls.__instance = super(YamlUtil, cls).__new__(cls, *args, **kwargs)return cls.__instancedef read_yaml(self, path):with open(path, encoding="utf-8") as f:result = f.read()result = yaml.load(result, Loader=yaml.FullLoader)return resultdef write_yaml(self, path, data):with open(path, "w", encoding="utf-8") as f:yaml.dump(data, f, Dumper=yaml.SafeDumper)yamlUtil = YamlUtil()

Python-PyYAML相关推荐

  1. python pyyaml模块使用示例:读取yaml文件内容

    yaml文件内容 websites:YAML: yaml.orgRuby: ruby-lang.orgPython: python.orgversions:- version2:name: 2.x- ...

  2. python没有代码提示怎么设置_Python Kite 使用教程 轻量级代码提示

    1: 概述 今天升级annacoda 插件 spyder (4.0.0 )的时候 提示安装kite ,这是什么玩意? 下载下来试一试? 原来:就是一个代码提示插件.. 说白了" 就是让开发者 ...

  3. python自然语言处理工具NLTK各个包的意思和作用总结

    [转]http://www.myexception.cn/perl-python/464414.html [原]Python NLP实战之一:环境准备 最近正在学习Python,看了几本关于Pytho ...

  4. mysql导入greenplum_greenPlum中通过gpfdist导入文本数据到数据库表中

    1.python版本要求2.4.4以上 [root@test install]# python Python 2.6.2 (r262:71600, May 14 2009, 10:46:21) [GC ...

  5. 自动化运维工具Ansible实战(一)简介和部署

    一.Ansible的介绍 Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点.实现了批量系统配置 ...

  6. 最新OpenHarmony系统一二级目录整理

    最新OpenHarmony系统一二级目录整理 坚果:润开鸿技术专家,华为HDE,InfoQ签约作者,OpenHarmony布道师,擅长HarmonyOS应用开发.跨平台Flutter开发.熟悉服务卡片 ...

  7. linux medea 软件安装,linux下超详细教程安装phonopy

    参考资料: (1)        http://blog.csdn.net/txcokokok/article/details/42178889 (2)        http://blog.sina ...

  8. Linux界面下运行vaspkit,linux下超详细教程安装phonopy - 第一原理 - 小木虫 - 学术 科研 互动社区...

    参考资料: (1)        http://blog.csdn.net/txcokokok/article/details/42178889 (2)        http://blog.sina ...

  9. symfony入门学习资料之九:YAML格式介绍

    symfony入门学习资料之九:YAML格式介绍 由于EDUSOHO的项目原因,中断了对symfony框架的继续学习,今天回顾了前面的总结,总结了八节.从建立简单的页面.控制器.路由.模板等,甚至包括 ...

  10. python读取配置文件获取所有键值对_python笔记14-读取yaml配置文件(pyyaml)

    yaml简介 1.yaml [ˈjæməl]: Yet Another Markup Language :另一种标记语言.yaml 是专门用来写配置文件的语言,非常简洁和强大,之前用ini也能写配置文 ...

最新文章

  1. ❤比较两种模糊特效❤filter: blur(10px)和backdrop-filter: blur(10px)的区别
  2. BZOJ 1977: [BeiJing2010组队]次小生成树(Kruskal+树上倍增)
  3. b. Suffix Zeroes
  4. python出现的次数最多的元素_Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算...
  5. python 定义method_python进阶14:实例方法和类方法、types.MethodType()
  6. 比较全的C语言面试题
  7. 13寸笔记本电脑尺寸_如何判断行李箱的尺寸?标准行李箱尺寸对照表(13~32寸)
  8. java中编码问题_[干货预警]一次搞懂Java中的编码问题
  9. python如何安装pdfminer_Python 3.6 中使用pdfminer解析pdf文件的实现
  10. 张朝阳一天只睡4小时?不知道,反正我每天都睡足7小时
  11. 乔治城大学 计算机排名,乔治城大学计算机科学硕士排名第40(2020年TFE Times排名)...
  12. nginx访问php文件an error occurred,nginx提示 An error occurred错误问题解决办法
  13. java8中for循环的几种写法
  14. 人工智能调度如何改变现场服务行业
  15. 快速理解深度信念网络
  16. 全局变量和局部变量笔记
  17. linux库怎么安装路径设置,Linux libtins 库安装教程
  18. Fire Net 放碉堡 —— DFS
  19. SPSS Modeler基础操作与模型求解
  20. 利用先进先出原则统计易飞ERP呆滞库存

热门文章

  1. 使用ResponseBodyAdvice实现下载注解
  2. 工程施工监理平台app开发 开创工程监理服务新理念
  3. 通达OA未授权任意文件上传及文件包含导致远程代码执行漏洞
  4. radmin自动启动服务器,Radmin自动连接器+服务端一键安装
  5. C语言学生籍贯信息记录簿
  6. spidermonkey学习
  7. Duplicate Cleaner - 重复文件 / 相似文件扫描 - 构建深度学习标注数据集
  8. Dalsa智能相机使用流程
  9. 爬取了大众点评和去哪儿网上4312家长沙美食,看看什么值得吃?|凹凸数读
  10. 键盘与计算机连接,罗技键盘怎么连接电脑?原来连接的方式这么简单!