首页 技术 正文
技术 2022年11月15日
0 收藏 679 点赞 3,983 浏览 1429 个字

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开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,077
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,552
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,400
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,813
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,896