Python基础笔记2-ruamel.yaml读写yaml文件

简介: 上一篇笔记记录了Python中的pyyaml库对yaml文件进行读写,但了解到ruamel.yaml也能对yaml文件进行读写,于是想尝试一下它的用法。


一,注意


这里首先要更正一下网上大部分博客的说法:使用PyYAML写入时不是yaml的标准形式。例如使用PyYAML将字典嵌套字典的数据写入yaml文件时,写入的yaml文件里会出现带{}的数据。实际我在写代码的过程中发现PyYAML5.3.1版本并不会出现这种情况。如下所示:


使用PyYAML库写入yaml文件

# @author: 给你一页白纸
import yaml
data = {
   "str": "Hello world.",
   "int": 110,
   "list": [10, "she", ["he", "it"]],
   "dict": {"account":"xiaoqq", "password": {"pwd1": 123456, "pwd2": "water"}},
   "tuple": (100, "a")
}
with open('./writeYamlData.yml', 'w', encoding='utf-8') as f:
   yaml.dump(data=data, stream=f, allow_unicode=True)

写入后的yaml文件内容如下:

dict:
  account: xiaoqq
  password:
    pwd1: 123456
    pwd2: water
int: 110
list:
- 10
- she
- - he
  - it
str: Hello world.
tuple: !!python/tuple
- 100
- a


二,安装ruamel.yaml库


安装命令:

pip install ruamel.yaml
# 安装速度慢则加上镜像源
pip install ruamel.yaml -i https://pypi.tuna.tsinghua.edu.cn/simple


使用时导入:

from ruamel import yaml


三,ruamel.yaml写入yaml文件


使用yaml.dump()方法写入,代码展示如下:

# @author: 给你一页白纸
from ruamel import yaml
data = {
   "str": "Hello world.",
   "int": 110,
   "list": [10, "she", ["he", "it"]],
   "dict": {"account":"xiaoqq", "password": {"pwd1": 123456, "pwd2": "water"}},
   "tuple": (100, "a")
}
# path为yaml文件的绝对路径
path ='./writeYamlData.yml'
with open(path, 'w', encoding='utf-8') as f:
   yaml.dump(data, f, Dumper=yaml.RoundTripDumper)


写入结果如下:

str: Hello world.
int: 110
list:
- 10
- she
- - he
  - it
dict:
  account: xiaoqq
  password:
    pwd1: 123456
    pwd2: water
tuple:
- 100
- a


注意:这里yaml.dump()里加上l了参数Dumper=yaml.RoundTripDumper。不加该参数则写入结果如下:

dict:
  account: xiaoqq
  password: {pwd1: 123456, pwd2: water}
int: 110
list:
- 10
- she
- [he, it]
str: Hello world.
tuple: !!python/tuple [100, a]


四,ruamel.yaml读取yaml文件


yaml文件数据如下:

dict:
  account: xiaoqq
  password:
    pwd1: 123456
    pwd2: water
int: 110
list:
- 10
- she
- - he
  - it
str: Hello world.
tuple: !!python/tuple
- 100
- a


使用yaml.load()方法读取,代码展示如下:

# @author: 给你一页白纸
from ruamel import yaml
# path为yaml文件的绝对路径
path ='./writeYamlData.y'
with open(path, 'r', encoding='utf-8') as doc:
    content = yaml.load(doc, Loader=yaml.Loader)
    print(content)


读取结果如下:

C:\Users\xiaoqq\AppData\Local\Programs\Python\Python37\python.exe C:/Users/xiaoqq/Desktop/test_project/readYaml.py
{'dict': {'account': 'xiaoqq', 'password': {'pwd1': 123456, 'pwd2': 'water'}}, 'int': 110, 'list': [10, 'she', ['he', 'it']], 'str': 'Hello world.', 'tuple': (100, 'a')}
Process finished with exit code 0


ruamel.yaml库继承子PyMYAL库,读写方法基本相同,目前来说可以根据自己的习惯选择使用 ruamel.yaml 还是 PyMYAL 进行yaml文件的读写操作。

相关文章
|
编解码 数据安全/隐私保护 Python
抖音批量发布视频工具,自动上传视频作品笔记,python发布软件
这个抖音批量发布工具包含三个主要模块:主上传程序、配置文件和视频预处理工具。主程序
|
人工智能 Ruby Python
python__init__方法笔记
本文总结了Python中`__init__`方法的使用要点,包括子类对父类构造方法的调用规则。当子类未重写`__init__`时,实例化会自动调用父类的构造方法;若重写,则需通过`super()`或直接调用父类名称来显式继承父类初始化逻辑。文中通过具体代码示例展示了不同场景下的行为及输出结果,帮助理解类属性与成员变量的关系,以及如何正确使用`super()`实现构造方法的继承。
619 9
|
API 数据安全/隐私保护 Python
小红书批量发布协议, 抖音自动批量发布软件脚本,笔记作品视频自动发布工具【python】
这个工具框架包含了小红书和抖音的批量发布功能,支持图片和视频处理、定时发布等功能
|
Web App开发 数据安全/隐私保护 Python
抖音快手小红书哔哩哔哩,批量发布作品笔记视频工具,自动发布作品上传笔记视频【python】
这个工具实现了四大平台的视频批量上传功能,包含完整的异常处理和日志记录。使用时需要配置
|
存储 JSON API
小红书批量发布笔记工具,小红书批量上传软件,python框架分享
这个框架包含了配置文件、工具函数、API封装和主程序四个模块。使用时需要先配置账号信息,
|
数据采集 JSON API
Python 实战:用 API 接口批量抓取小红书笔记评论,解锁数据采集新姿势
小红书作为社交电商的重要平台,其笔记评论蕴含丰富市场洞察与用户反馈。本文介绍的小红书笔记评论API,可获取指定笔记的评论详情(如内容、点赞数等),支持分页与身份认证。开发者可通过HTTP请求提取数据,以JSON格式返回。附Python调用示例代码,帮助快速上手分析用户互动数据,优化品牌策略与用户体验。
2563 3
|
数据采集 JSON API
Python 实战!利用 API 接口获取小红书笔记详情的完整攻略
小红书笔记详情API接口帮助商家和数据分析人员获取笔记的详细信息,如标题、内容、作者信息、点赞数等,支持市场趋势与用户反馈分析。接口通过HTTP GET/POST方式请求,需提供`note_id`和`access_token`参数,返回JSON格式数据。以下是Python示例代码,展示如何调用该接口获取数据。使用时请遵守平台规范与法律法规。
1486 0
|
存储 JSON 对象存储
如何使用 Python 进行文件读写操作?
大家好,我是V哥。本文介绍Python中文件读写操作的方法,包括文件读取、写入、追加、二进制模式、JSON、CSV和Pandas模块的使用,以及对象序列化与反序列化。通过这些方法,你可以根据不同的文件类型和需求,灵活选择合适的方式进行操作。希望对正在学习Python的小伙伴们有所帮助。欢迎关注威哥爱编程,全栈路上我们并肩前行。
545 4
|
Python
python读写操作excel日志
主要是读写操作,创建表格
255 2

推荐镜像

更多