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对list列表结构中的值进行去重的方法总结
May 07 Python
python中函数总结之装饰器闭包详解
Jun 12 Python
在Python中通过threading模块定义和调用线程的方法
Jul 12 Python
Python实现简易端口扫描器代码实例
Mar 15 Python
点球小游戏python脚本
May 22 Python
python使用time、datetime返回工作日列表实例代码
May 09 Python
Python 多个图同时在不同窗口显示的实现方法
Jul 07 Python
Python笔记之工厂模式
Nov 20 Python
python返回数组的索引实例
Nov 28 Python
windows系统Tensorflow2.x简单安装记录(图文)
Jan 18 Python
tensorflow中的数据类型dtype用法说明
May 26 Python
python中 .npy文件的读写操作实例
Apr 14 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中static静态变量的使用方法详解
2010/06/04 PHP
typecho插件编写教程(三):保存配置
2015/05/28 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
javascript在事件监听方面的兼容性小结
2010/04/07 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
jquery模拟实现鼠标指针停止运动事件
2016/01/12 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
js遍历json的key和value的实例
2017/01/22 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
浅要分析Python程序与C程序的结合使用
2015/04/07 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
pytorch加载语音类自定义数据集的方法教程
2020/11/10 Python
Parfume Klik丹麦:香水网上商店
2018/07/10 全球购物
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
如何启动时不需输入用户名与密码
2014/05/09 面试题
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
个人简历自荐信
2013/12/05 职场文书
环保小标语
2014/06/13 职场文书
药店促销活动总结
2014/07/10 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
本科毕业论文致谢怎么写
2015/05/14 职场文书
基于Python实现流星雨效果的绘制
2022/03/18 Python
基于Python实现对比Exce的工具
2022/04/07 Python
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python
设置IIS Express并发数
2022/07/07 Servers