Python读写yaml文件


Posted in Python onMarch 20, 2022

1.关于yaml

yaml基本语法规则:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • #表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样

2.yaml数据结构

YAML 支持的数据结构有三种:

  • 对象

键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
对象的一组键值对,使用冒号结构表示。

  • 数组

一组按次序排列的值,又称为序列(sequence) / 列表(list)
一组连词线开头的行,构成一个数组。

  • 纯量(scalars

单个的、不可再分的值
包括字符串,布尔值,整数,浮点数,Null,时间,日期

3.yaml文件格式

auth.login:
  data:
    name: '18888888883'
    password: jnyj123456
  url: https://XXXX-api-XXXX.zje.com/auth/login
headers:
  Accept: '*/*'
  Accept-Encoding: gzip, deflate, br
  Accept-Language: zh-CN,zh;q=0.9
  Connection: keep-alive
  Content-Length: '46'
  Content-type: application/json
  Host: dexin-api-test.zje.com
  Origin: https://XXXX-spa-XXX.zje.com
  Referer: https://XXXX-spa-XXX.zje.com/
  Sec-Fetch-Dest: empty
  Sec-Fetch-Mode: cors
  Sec-Fetch-Site: same-site
  User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML,
    like Gecko) Chrome/98.0.4758.80 Safari/537.36
  authorization: Bearer
  sec-ch-ua: '" Not A;Brand";v="33"
  sec-ch-ua-mobile: ?0000
  sec-ch-ua-platform: macOSis

学习产出:

class OpenYaml(object):

    def __init__(self):
        self.file_path = os.path.join(route("/DataYaml/yaml.yaml"))  # 拼接读取的文件路径

    def open(self, *args):
        '''
           args[0]: 字典名称
           args[1]: 字段值
           读取文件
        '''
        try:
            if len(args) == 2:  # 根据传值判断执行内容
                with open(self.file_path, "r") as f:  # 读取yaml
                    Json = f.read()  # 获取yaml
                    Dict = yaml.safe_load(Json)[args[0]]  # 提取制定内容
                if args[1] in Dict.keys():  # 判断key是否存在
                    logs.info(f"yaml文件,查找内容成功,内容:{Dict[args[1]]}")
                    return Dict[args[1]]
                else:
                    print(f"对应字段{args[1]}不存在...")
                    logs.info(f"对应字段{args[1]}不存在...")
            else:
                with open(self.file_path, "r") as f:
                    Json = f.read()
                    Dict = yaml.safe_load(Json)[args[0]]
                return Dict
        except Exception as e:
            print(f'读取yaml文件,报错:{e}')
            logs.info(f'读取yaml文件,报错:{e}')

    def Wri_file(self, *args):

        '''
        :param args: args[0] 接口字段、args[1] key、 args[2] value
        :return: None
        把字段写入yaml
        '''
        try:
            with open(self.file_path, encoding="utf-8") as f:  # 读取文件
                data = yaml.load(f.read(), Loader=yaml.FullLoader)  # 获取读取内容
            print(data[args[0]])
            if data is not None:  # 判断读取内容是否为空
                if str(data[args[0]][args[1]]) in str(data[args[0]]):  # 判断name是否存在在dict
                    data[args[0]][args[1]] = args[2]
                    with open(self.file_path, 'w', encoding="utf-8") as f:  # 写入
                        yaml.dump(data, stream=f, allow_unicode=True)
                else:
                    print("写入文件的字段不存在!写入失败...")
            else:
                logs.info("写入文件的返回值为空!不能写入...")
        except Exception as y:
            logs.info(f"写入文件失败:{y}")


if __name__ == "__main__":
    OpenYaml().Wri_file("headers", "Content-Length", "22")
    OpenYaml().open("auth.login", "data")

到此这篇关于Python读写yaml文件的文章就介绍到这了,更多相关Python读写yaml内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python 代码性能优化技巧分享
Aug 07 Python
使用C++扩展Python的功能详解
Jan 12 Python
python链接oracle数据库以及数据库的增删改查实例
Jan 30 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
Python一句代码实现找出所有水仙花数的方法
Nov 13 Python
浅谈Python接口对json串的处理方法
Dec 19 Python
django多对多表的创建,级联删除及手动创建第三张表
Jul 25 Python
PyTorch中常用的激活函数的方法示例
Aug 20 Python
Django 解决新建表删除后无法重新创建等问题
May 21 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 Python
python实现简单的井字棋
May 26 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 Python
PO模式在selenium自动化测试框架的优势
Python IO文件管理的具体使用
Python实现Excel文件的合并(以新冠疫情数据为例)
Python中三种花式打印的示例详解
Mar 19 #Python
Python学习之包与模块详解
Python requests用法和django后台处理详解
Mar 19 #Python
Python实现Hash算法
Mar 18 #Python
You might like
PHP文件操作方法汇总
2015/07/01 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
jQuery当鼠标悬停时放大图片的效果实例
2013/07/03 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
采用call方式实现js继承
2014/05/20 Javascript
JSONP之我见
2015/03/24 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
JavaScript贪吃蛇小组件实例代码
2017/08/20 Javascript
详解react-native-fs插件的使用以及遇到的坑
2017/09/12 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
npm qs模块使用详解
2020/02/07 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
使用PDB简单调试Python程序简明指南
2015/04/25 Python
讲解Python中if语句的嵌套用法
2015/05/14 Python
Python的Flask开发框架简单上手笔记
2015/11/16 Python
更改Ubuntu默认python版本的两种方法python-> Anaconda
2016/12/18 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
2020/04/14 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
应届毕业生自荐信例文
2014/02/26 职场文书
大学生英语演讲稿
2014/04/24 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS