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

image-20220807161559434

1.3 纯量

纯量即是单个值。类型如上述。

补充:锚点的使用。

&建立锚点,<<表示合并到当前数据,*引用锚点。

defaults: &defaults # 建立锚点defaults
  port: 3306
  ip: 127.0.0.1
  user: root
dev:
  port: 3307
  <<: *defaults # 将上述的数据合并到当前锚点的地方

image-20220807162521100

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)

image-20220807162715074

上下文写法:

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)

image-20220807163425888

写入成功。但是写入的顺序是没有按照字典中的顺序写入,因为字典是无序的,虽然新版本的python进行了优化,也有可能是兼容性的问题,没有按照顺序进行写入。写入的时候是追加模式,有可能会出现重复值的情况,避免重复写入的问题。

继续努力,终成大器。

posted @ 2022-08-07 16:41  紫青宝剑  阅读(701)  评论(0编辑  收藏  举报