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基于pygame实现响应游戏中事件的方法(附源码)
Nov 11 Python
Python 多核并行计算的示例代码
Nov 07 Python
python中判断文件编码的chardet(实例讲解)
Dec 21 Python
详解Python自建logging模块
Jan 29 Python
python实现在IDLE中输入多行的方法
Apr 19 Python
使用Python获取并处理IP的类型及格式方法
Nov 01 Python
python 执行终端/控制台命令的例子
Jul 12 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
python hmac模块验证客户端的合法性
Nov 07 Python
利用python做表格数据处理
Apr 13 Python
详解非极大值抑制算法之Python实现
Jun 28 Python
Python中tqdm的使用和例子
Sep 23 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实现动态web服务器方法
2015/07/29 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
2017/09/05 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
python中私有函数调用方法解密
2016/04/29 Python
python3中str(字符串)的使用教程
2017/03/23 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
CSS3字体效果的设置方法小结
2016/06/13 HTML / CSS
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
智乐游戏测试笔试题
2014/05/21 面试题
行政人员工作职责
2013/12/05 职场文书
获奖的大学生创业计划书
2014/01/05 职场文书
空中乘务员岗位职责
2014/03/08 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
2019年聘任书的写作格式及范文!
2019/07/03 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
Mysql将字符串按照指定字符分割的正确方法
2022/05/30 MySQL
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS