PyYAML用于将YAML格式的数据解析为Python对象,或将Python对象转换为YAML格式的数据。YAML是一种易于阅读和编写的数据序列化格式,常用于配置文件、数据传输和存储等场景。
pip install pyyaml
假设有一个名为example.yml
的YAML文件,其中包含以下内容:
name: John
age: 30
hobbies:
- reading
- hiking
我们可以通过yaml.load(file,Loader=yaml.Loader)
的方法装载YAML文件,这将返回一个装有数据的字典,如:
import yaml
with open("example.yml") as f:
load_data = yaml.load(f, Loader=yaml.Loader)
print(load_data)
print(load_data["name"], type(load_data["name"]))
print(load_data.get("age"), type(load_data.get("age")))
print(load_data["hobbies"], type(load_data["hobbies"]), load_data["hobbies"][0])
输出结果:
{'name': 'John', 'age': 30, 'hobbies': ['reading', 'hiking']}
John <class 'str'>
30 <class 'int'>
['reading', 'hiking'] <class 'list'> reading
也可以使用yaml.safe_load()
方法,这样就可以不用传Loader=yaml.Loader
形参了,如:
import yaml
with open("example.yml") as f:
load_data = yaml.safe_load(f)
print(load_data)
输出结果:
{'name': 'John', 'age': 30, 'hobbies': ['reading', 'hiking']}
可以使用PyYAML将Python对象转换为YAML格式的数据。假设有一个名为data的Python字典:
data = {
'name': 'John',
'age': 30,
'hobbies': ['reading', 'hiking']
}
可以使用yaml.dump(data)
或yaml.safe_dump(data)
将其转换为YAML格式的数据:
import yaml
yaml_data = yaml.dump(data)
# dump_data = yaml.safe_dump(data)
print(yaml_data)
输出结果:
age: 30
hobbies:
- reading
- hiking
name: John
然后可以将该结果写入到YAML文件中:
with open("example.yml","w") as f:
f.write(yaml_data)
为该库写一个工具类,可以在方便的时候调用。如下:
import yaml
class YamlUtils:
"""yaml工具类"""
@classmethod
def loadYamlFile(cls, file_path, encoding="uft-8"):
"""
加载yaml文件
:param file_path: yaml文件路径
:param encoding: 编码,默认为uft-8
:return: yaml转换后的数据,格式为字典
"""
with open(file_path, mode="r", encoding=encoding) as f:
load_data = yaml.safe_load(f)
return load_data
@classmethod
def dumpDataToYaml(cls, file_path, dict_data, encoding="uft-8"):
"""
将数据写入yaml文件
!!!注意该方法会覆盖yaml中的全部数据!!!
:param file_path: yaml文件路径
:param dict_data: 字典数据
:param encoding: 编码,默认为uft-8
:return:
"""
dump_data = yaml.safe_dump(dict_data)
with open(file_path, mode="w", encoding=encoding) as f:
f.write(dump_data)
@classmethod
def getValue(cls, dict_data, key):
"""
获取字典中的值
可以配合`loadYamlFile`方法使用,如:
load_data = YamlUtils.loadYamlFile("example.yml")
value = YamlUtils.getValue(load_data)
print(value)
:param dict_data: 字典数据
:param key: key
:return: 对应key的值
"""
return dict_data[key]