Python 操作 yaml 文件
Python 操作 yaml 文件
yaml的意思是:Yet Another Markup Language(仍是一种标记语言)
参考文章:https://blog.csdn.net/weixin_43831559/article/details/124850190
1.yaml 文件
语法特点:
- 大小写敏感
- 使用缩进表示层级关系,缩进不允许使用
tab
键,只允许使用空格 - 缩进的空格数不重要,只要相同层级元素
左对齐
即可 #
做为注释
数据类型:
- 对象:标示符
:
,键值对集合,又称映射(mapping)哈希(hash)字典(dict) - 数组:标示符
-
,一组按照次序排列的值,又称序列 - 纯量:单个,不可再分的值
- 字符串:可以加引号,也可以不加引号。
- 布尔值:True/False
- 整数:1,2,3
- 浮点数:1.2,1.3
- null: ~
- 日期:2022-10-10 格式:yyy-MM-dd
- 时间:2022-10-01 10:10:10 格式:yyy-MM-ddTHH:mm:ss 日期与时间用T连接
1.1 对象
写法一: 对象键值对使用键:值
冒号分割键值,特别注意,冒号后面(右边值前面)要有一个空格。
key: value
写法二:流式写法
key: {K1:v1,k2:v2}
写法三:缩进标识层级
database:
port: 3306
username: root
1.2 数组
以-
开头的行标识构成一个数组,-
也需要跟一个空格,不然会被识别成字符串:
version: v1
ip:
# 一行代表数组的一列项值
- 127.0.0.1
- 192.168.1.1
数组中存放键值对
commpaines:
-
id: 1
name: aa
-
id: 2
name: bb
1.3 纯量
纯量即是单个值。类型如上述。
补充:锚点的使用。
&
建立锚点,<<
表示合并到当前数据,*
引用锚点。
defaults: &defaults # 建立锚点defaults
port: 3306
ip: 127.0.0.1
user: root
dev:
port: 3307
<<: *defaults # 将上述的数据合并到当前锚点的地方
2.Python操作yaml
# 安装
pip install pyyaml
2.1 读取yaml 文件
import yaml
fp = open('./config.yaml','r',encoding='utf-8')
msg = yaml.load(fp,Loader=yaml.FullLoader)
fp.close()
print(msg)
上下文写法:
with open('./config.yaml','r',encoding='utf-8')as fp:
msg = yaml.load(fp,Loader=yaml.FullLoader)
print(msg)
2.2 写入yaml文件
data = {
'ip':'127.0.0.1',
'port':'27017',
'mysql':{
'user':'mysql',
'password':'aaaa'
}
}
with open('./config.yaml','a',encoding='utf-8')as fp:
yaml.dump(data,fp,allow_unicode=True)
写入成功。但是写入的顺序是没有按照字典中的顺序写入,因为字典是无序的,虽然新版本的python进行了优化,也有可能是兼容性的问题,没有按照顺序进行写入。写入的时候是追加模式,有可能会出现重复值的情况,避免重复写入的问题。
继续努力,终成大器。