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功能键的读取方法
May 28 Python
Python线程指南详细介绍
Jan 05 Python
用Python3创建httpServer的简单方法
Jun 04 Python
在IPython中进行Python程序执行时间的测量方法
Nov 01 Python
Tensorflow实现酸奶销量预测分析
Jul 19 Python
Python的形参和实参使用方式
Dec 24 Python
np.random.seed() 的使用详解
Jan 14 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
python中turtle库的简单使用教程
Nov 11 Python
Python urllib3软件包的使用说明
Nov 18 Python
Python操作Excel的学习笔记
Feb 18 Python
TensorFlow低版本代码自动升级为1.0版本
Feb 20 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函数
2011/05/31 PHP
如何使用PHP计算上一个月的今天
2013/05/23 PHP
php多个文件及图片上传实例详解
2014/11/10 PHP
phpinfo的知识点总结
2019/10/10 PHP
discuz论坛更换域名,详细文件修改步骤
2020/12/09 PHP
js自带函数备忘 数组
2006/12/29 Javascript
javaScript对象和属性的创建方法
2007/01/15 Javascript
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
2种jQuery 实现刮刮卡效果
2015/02/01 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
js实现的xml对象转json功能示例
2016/12/24 Javascript
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
10分钟上手vue-cli 3.0 入门介绍
2018/04/04 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
详解vue 命名视图
2019/08/14 Javascript
layui form表单提交之后重新加载数据表格的方法
2019/09/11 Javascript
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
python打开文件并获取文件相关属性的方法
2015/04/23 Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
Django Highcharts制作图表
2016/08/27 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
Python使用type动态创建类操作示例
2020/02/29 Python
pandas统计重复值次数的方法实现
2021/02/20 Python
阿迪达斯德国官方网站:adidas德国
2017/07/12 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
"序列点" 是什么
2016/07/29 面试题
师范应届生语文教师求职信
2013/10/29 职场文书
2014自主招生自荐信策略
2014/01/27 职场文书
保护地球的标语
2014/06/17 职场文书
环卫工人节活动总结
2014/08/29 职场文书
2014年党支部书记工作总结
2014/12/04 职场文书
黑白记忆观后感
2015/06/18 职场文书