前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python - 通过PyYaml库操作YAML文件

Python - 通过PyYaml库操作YAML文件

作者头像
小菠萝测试笔记
发布2020-06-09 15:23:42
1.2K0
发布2020-06-09 15:23:42
举报
文章被收录于专栏:自动化、性能测试

PyYaml简单介绍

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

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

代码语言:javascript
复制
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 的请求参数,如下:

代码语言:javascript
复制
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语法糖转换,如下:

代码语言:javascript
复制
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)默认加载器调用 (发出警告后)(full_load)

yaml.load(input)

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

存储数据到YAML的方法

代码语言:javascript
复制
with open(path, "w", encoding="utf-8") as f:
     yaml.dump(data, f, Dumper=yaml.SafeDumper) # 可选BaseDumper、SafeDumper 

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

代码语言:javascript
复制
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)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PyYaml简单介绍
  • 读取YAML5.1之前的读取方法
  • 读取YAML 5.1之后的读取方法
  • 存储数据到YAML的方法
  • 封装成一个操作YAML的工具类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档