PyYaml简单介绍

  • Python的PyYAML模块是Python的YAML解析器和生成器
  • 它有个版本分水岭,就是5.1

读取YAML5.1之前的读取方法

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

当你运行的时候,会报一个Warning

读取YAML 5.1之后的读取方法

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

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

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

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

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

  1. BaseLoader:仅加载最基本的YAML
  2. SafeLoader:安全地加载YAML语言的子集。建议用于加载不受信任的输入。(safe_load)
  3. FullLoader:加载完整的YAML语言。避免任意代码执行。这是当前(PyYAML 5.1)默认加载器调用 yaml.load(input) (发出警告后)(full_load)
  4. UnsafeLoader(也称为Loader向后兼容性):原始的Loader代码,可以通过不受信任的数据输入轻松利用。(unsafe_load) 

存储数据到YAML的方法

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

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

class YamlUtil:
__instance = None def __new__(cls, *args, **kwargs):
if not cls.__instance:
print("YamlUtil first init")
cls.__instance = super(YamlUtil, cls).__new__(cls, *args, **kwargs)
return cls.__instance def read_yaml(self, path):
with open(path, encoding="utf-8") as f:
result = f.read()
result = yaml.load(result, Loader=yaml.FullLoader)
return result def 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库操作YAML文件的更多相关文章

  1. Python3操作YAML文件

    数据及配置文件之争 数据及文件通常有三种类型: 配置文件型:如ini,conf,properties文件,适合存储简单变量和配置项,最多支持两层,不适合存储多层嵌套数据 表格矩阵型:如csv,exce ...

  2. Python 3 mysql 库操作

    Python 3 mysql 库操作 一.基础相关知识 MySQL数据库基本操作知识储备 数据库服务器:一台计算机(对内存要求比较高) 数据库管理系统:如mysql,是一个软件 数据库:oldboy_ ...

  3. 用Python的pandas框架操作Excel文件中的数据教程

    用Python的pandas框架操作Excel文件中的数据教程 本文的目的,是向您展示如何使用pandas 来执行一些常见的Excel任务.有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其 ...

  4. Python基础笔记1-Python读写yaml文件(使用PyYAML库)

    最近在搭建自动化测试项目过程中经常遇到yaml文件的读写,为了方便后续使用,决定记下笔记. 一,YAML 简介 YAML,Yet Another Markup Language的简写,通常用来编写项目 ...

  5. Python操作yaml文件

    基本的yaml语法 http://ansible-tran.readthedocs.io/en/latest/docs/YAMLSyntax.html YAML 还有一个小的怪癖. 所有的 YAML ...

  6. 记录python接口自动化测试--把操作excel文件的方法封装起来(第五目)

    前面补充了如何来操作excel文件,这次把如何获取excel文件的sheet对象.行数.单元格数据的方法进行封装,方便后面调用 handle_excel.py# coding:utf-8 import ...

  7. python操作YAML文件之pyyaml库

    1. YAML简介 YAML是一种被认为可以超越XML.JSON的配置文件,最早接触是Spring Boot,木有想到python也是支持的,遂研究一下. python解析YAML库叫做pyyaml, ...

  8. python基础-PyYaml操作yaml文件

    yaml语法 格式 它的基本语法规则如下 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 YAML 支持的数据结构有 ...

  9. python 操作yaml文件

    yaml 5.1版后弃用了yaml.load(file)这个用法,因为觉得很不安全,5.1版后就修改了需要指定Loader,通过默认加载​​器(FullLoader)禁止执行任意函数yaml 5.1之 ...

随机推荐

  1. joomla 3.7.0 (CVE-2017-8917) SQL注入漏洞

    影响版本: 3.7.0 poc http://192.168.49.2:8080/index.php?option=com_fields&view=fields&layout=moda ...

  2. Go测试技术分享(一):场景化接口Case编写

    一.前言 本人负责的支付清结算方向的测试工作,在测试项目中,会出现流程化的接口调用,请求完一个接口后,继续请求另一个接口(这里的接口可以指Http,也指rpc接口),这里以一个真实场景为例:用户在平台 ...

  3. selenium WebDriverWait

    Selenium WebDriverWait的知识: 一.webdrivewait 示例代码  from selenium import webdriver  from selenium.webdri ...

  4. 模拟input type=file

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Vulhub-DC-3靶场

    Vulhub-DC-3靶场 前言 今天把DC-3的靶场打了一遍,可以说这个靶场用到的思路是非常经典的,从信息搜集到漏洞利用包括内核提权.最最重要的是为了下载它的提权EXP,我它喵还花了一块二买了个CS ...

  6. Android菜鸟进字节跳动,居然是看了这个......

    谈谈我的真实感受吧- 程序员真的是需要将终生学习贯彻到底的职业,一旦停止学习,离被淘汰,也就不远了. 金三银四.金九银十跳槽季,这是一个千年不变的话题,每到这个时候,很多人都会临阵磨枪,相信不快也光. ...

  7. Golang语言系列-19-发布系统

    发布系统 后端代码:https://gitee.com/lichengguo/yiihua_ops_go 前端代码:https://gitee.com/lichengguo/yiihua_ops_ht ...

  8. Blazor+Dapr+K8s微服务之服务调用

    1.1         Dapr环境配置 1.1.1        在开发机安装Docker Desktop并启用Kubernetes 安装过程略,安装好后效果如下:(左下角两个绿色指示Docker和 ...

  9. DVWA-全等级命令行注入

    DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...

  10. HCNA Routing&Switching之广域网协议HDLC和PPP

    前文我们了解了地址转换技术NAT相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15168042.html:今天我们来聊一聊广域网中的两个二层封装协议H ...