书是灵魂最好的麻醉剂。——钱伯斯
我觉得可以把第一个书改为技术!
#存在 test.yml 文件,内容如下:
name: xiaohong
age: 24
books:
- 呐喊
- 朝花夕拾
读取YAML代码如下:
import yaml
file = open(‘test.yaml‘, ‘r‘, encoding="utf-8")
#使用文件对象作为参数
data = yaml.load(file)
print(data)
以上代码执行结果如下:
/usr/local/bin/python3.8 /Users/lanyin/PycharmProjects/newdream/app_demo/blog_demo/test_demo_02.py
{‘name‘: ‘xiaohong‘, ‘age‘: 24, ‘books‘: [‘呐喊‘, ‘朝花夕拾‘]}
类型: <class ‘dict‘>
/Users/lanyin/PycharmProjects/newdream/app_demo/blog_demo/test_demo_02.py:6: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
data = yaml.load(file)
Process finished with exit code 0
会出现警告,原因是YAML 5.1版本后弃用了yaml.load(file)这个用法,因为觉得很不安全,5.1版本之后就修改了需要指定Loader,通过默认加载??器(FullLoader)禁止执行任意函数,该load函数也变得更加安全。建议代码如下:
import yaml
file = open(‘test.yaml‘, ‘r‘, encoding="utf-8")
#读取文件中的所有数据
file_data = file.read()
file.close()
#指定Loader
data = yaml.load(file_data,Loader=yaml.FullLoader)
print(data)
#存在 test.yml 文件,内容如下:
---
name: xiaoli
age: 22
---
name: xiaohuang
age: 21
load_all()方法使用代码如下:
import yaml
file = open(‘test.yaml‘, ‘r‘, encoding="utf-8")
#datas为load_all()方法返回的迭代器对象
datas = yaml.load_all(file,Loader=yaml.FullLoader)
for data in datas:
print(data)
本例中的YAML文件使用 --- 分为两段,load_all()方法会创建一个迭代器对象,分开存放两段数据。
import yaml
data = { ‘name‘:‘xiaowang‘, ‘age‘:30 , ‘sex‘:‘男‘ }
data_yaml = yaml.dump(data).encode(‘utf-8‘).decode(‘unicode_escape‘)
print(data_yaml)
以上示例中.encode(‘utf-8‘).decode(‘unicode_escape‘) 是先编码为‘utf-8‘,然后解码(或称为反编码)成汉字。大家如对此不熟悉,可以逐个去掉.encode(‘utf-8‘).decode(‘unicode_escape‘) 看显示效果。
import yaml
data = { ‘name‘:‘xiaowang‘, ‘age‘:30 , ‘sex‘:‘男‘ }
yaml_file = open(‘test.yaml‘,‘w‘)
#yaml_file作为dump()第二个参数,是一个可写状态的文件对象
yaml.dump(data, yaml_file ,default_flow_style=False,encoding=‘utf-8‘,allow_unicode=True)
yaml_file.flush()
yaml_file.close()
原文:https://www.cnblogs.com/dream66/p/12549248.html