[Python] 如何操作yaml文件

什么是yaml格式?

YAML(YAML Ain't Markup Language)是一种简洁的非标记语言,用于数据序列化和存储。它以易读性、可扩展性和灵活性为特点,常用于配置文件、数据交换等场景。

YAML文件使用缩进表示层次结构,而不是像HTML或XML那样使用标签。这使得YAML文件更加易于阅读和编写。YAML还支持注释、锚点和别名等功能,使其更加强大和灵活。

YAML文件的基本结构包括键值对、列表和嵌套结构。例如:

# 注释
name: John Doe
age: 30
city: New York

# 列表
hobbies:
  - reading
  - writing
  - coding

# 嵌套结构
address:
  street: 123 Main St
  city: Anytown
  state: CA
  zip: 12345

YAML Ain’t Markup Language (YAML™) Version 1.1

第三方库PyYaml

PyYAML · PyPI

https://pyyaml.org/ 

https://pyyaml.org/wiki/PyYAMLDocumentation

PyYAML中文文档-阿里云开发者社区

安装PyYaml

pip install PyYAML

PyYaml常用方法

以下是一些常用的方法如下:

yaml.load()函数

从文件中加载YAML数据。

import yaml

with open('example.yaml', 'r', encoding='utf-8') as file:
    data = yaml.load(file, Loader=yaml.FullLoader)
    print(data)

yaml.dump()函数

dump(data, stream=None, Dumper=Dumper,
    default_style=None,
    default_flow_style=None,
    encoding='utf-8', # encoding=None (Python 3)
    explicit_start=None,
    explicit_end=None,
    version=None,
    tags=None,
    canonical=None,
    indent=None,
    width=None,
    allow_unicode=None,
    line_break=None)

将Python对象转换为YAML格式的字符串,并将其写入文件。

import yaml

data = {
    'name': '张三',
    'age': 30,
    'hobbies': ['阅读', '写作', '编程']
}

with open('output.yaml', 'w', encoding='utf-8') as file:
    yaml.dump(data, file, default_flow_style=True, allow_unicode=True)

yaml.safe_load()函数

从文件中安全地加载YAML数据。

import yaml

with open('example.yaml', 'r', encoding='utf-8') as file:
    data = yaml.safe_load(file)
    print(data)

yaml.safe_dump()函数

将Python对象转换为YAML格式的字符串,并将其写入文件。

import yaml

data = {
    'name': '张三',
    'age': 30,
    'hobbies': ['阅读', '写作', '编程']
}

with open('output.yaml', 'w', encoding='utf-8') as file:
    yaml.safe_dump(data, file, default_flow_style=False, allow_unicode=True)

yaml.load_all()函数

从文件中加载所有YAML数据。

import yaml

with open('output.yaml', 'r', encoding='utf-8') as file:
    data = list(yaml.load_all(file, Loader=yaml.FullLoader))
    print(data)

使用案例

读取,修改和保存yaml文件

import yaml

# 读取YAML文件
with open("example.yaml", "r", encoding="utf-8") as file:
    data = yaml.safe_load(file)
    print(data)

# 修改YAML文件内容
data["key"] = "new_value"

# 将修改后的内容写回YAML文件
with open("example.yaml", "w", encoding="utf-8") as file:
    yaml.safe_dump(data, file, default_flow_style=False, allow_unicode=True)

这里的example.yaml是一个简单的YAML文件,内容如下:

name: John Doe
age: 30
city: New York

代码首先读取YAML文件并将其内容解析为Python字典。然后,它修改字典中的一个值,并将修改后的字典写回YAML文件。

创建一个新的yaml文件

import yaml

# 创建一个字典对象
data = {
    'name': '张三',
    'age': 30,
    'hobbies': ['阅读', '写作', '编程']
}

# 将字典对象转换为YAML格式的字符串
yaml_str = yaml.dump(data, allow_unicode=True)

# 以写入模式打开一个新的YAML文件
with open('output.yaml', 'w', encoding='utf-8') as file:
    # 将YAML格式的字符串写入文件
    file.write(yaml_str)

这段代码将创建一个名为output.yaml的新文件,并将字典data的内容以YAML格式写入该文件。

age: 30
hobbies:
- 阅读
- 写作
- 编程
name: 张三

输出结果并不是按照字典key出现的先后顺序,而是按照key进行升序排序。 

使用体验

使用PyYaml操作yaml文件非常简单,但是保存的时候,似乎无法控制key的顺序。

如果要实现自定义key的顺序,根据文档

https://pyyaml.org/wiki/PyYAMLDocumentation

 可以通过自定义自己的python实体对象来实现,等后续有需要了,在尝试一下。

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老狼IT工作室

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值