ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python 操作 yaml 文件

2022-08-07 17:04:18  阅读:497  来源: 互联网

标签:fp 10 文件 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进行了优化,也有可能是兼容性的问题,没有按照顺序进行写入。写入的时候是追加模式,有可能会出现重复值的情况,避免重复写入的问题。

继续努力,终成大器。

标签:fp,10,文件,Python,写入,yaml,键值,锚点
来源: https://www.cnblogs.com/Blogwj123/p/16559340.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有