yaml文件的书写

pyyaml的使用

版本控制:
python3.6.8
pyyaml 5.1
安装方法:

pip install pyyaml

今天按照网上的代码使用pyyaml模块时,报了警告:

YAMLLoadWarning: calling yaml.load() without Loader=… is deprecated,
as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.

于是就去官网看了官方说明
在pyyaml5.1版本前,yaml.load方法可以调用任何python函数,包括一些系统指令,这是非常不安全的,因此yaml.load方法新加了一个入参’loader’

解决上述warning的两个办法:
1.如果你不是代码的开发者,可以在PythonWarning环境变量中加入以下指令

PYTHONWARNINGS=ignore::yaml.YAMLLoadWarning

2.如果你是代码的开发者,那么最好在yaml.load方法中,加上’loader’参数

yaml.load(input, Loader=yaml.FullLoader)

一共有四种loader
BaseLoader 载入大部分的基础YAML
SafeLoader 载入YAML的子集,推荐在不可信的输入时使用
FullLoader 这是默认的载入方式,载入全部YAML
UnsafeLoader 老版本的载入方式

3.作为开发者,你还可以用一个全局变量来忽略该warning

yaml.warnings({'YAMLLoadWarning': False})

yaml文件的读写

yaml_dict = {
   	"user_name":"zcc",
   	"birthday":"2019-3-28",
   	"gender":1,
   	"address":"杭州"
}
with open (os.path.join(yaml_dir,file_name),'w',encoding='utf-8') as f:
    yaml.dump(yaml_dict,f)

我在指定的目录创建了一个yaml文件,虽然在写文件时指定了编码为utf-8,但查看文件内容时中文还是不能正常显示。不过并不影响之后的读取。

with open (yaml_file,'r',encoding='utf-8') as f:
    yaml_dict = yaml.load(f,Loader=yaml.FullLoader)
    print(yaml_dict["user_name"])
    print(yaml_dict["address"])

用yaml.load方法载入了yaml文件后,就能像字典一样使用了。

另外,看到网上有博客误导大家,说pyyaml写的yaml文件,不支持复杂的结构(字典嵌套字典)。亲测pyyaml完全支持字典嵌套字典的写法:

yaml_dict = {
   	"user_name":"zcc",
   	"birthday":"2019-3-28",
   	"gender":{
   		"a":1,
   		"b":2,
   	},
   	"address":"杭州"
}
with open (os.path.join(yaml_dir,file_name),'w',encoding='utf-8') as f:
    yaml.dump(yaml_dict,f)

生成的yaml文件内容:

address: "\u676D\u5DDE"
birthday: 2019-3-28
gender:
  a: 1
  b: 2
user_name: zcc

猜你喜欢

转载自blog.csdn.net/qq_39985298/article/details/88866094