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中的浅复制与深复制
Jul 02 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
Aug 30 Python
Python冲顶大会 快来答题!
Jan 17 Python
python3中获取文件当前绝对路径的两种方法
Apr 26 Python
对numpy中的数组条件筛选功能详解
Jul 02 Python
基于python指定包的安装路径方法
Oct 27 Python
Python3 Post登录并且保存cookie登录其他页面的方法
Dec 28 Python
python3中pip3安装出错,找不到SSL的解决方式
Dec 12 Python
BeautifulSoup获取指定class样式的div的实现
Dec 07 Python
利用python+request通过接口实现人员通行记录上传功能
Jan 13 Python
使用tensorflow 实现反向传播求导
May 26 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实现的在线人员函数库
2008/04/09 PHP
PHP实时显示输出
2008/10/02 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
简单实现PHP留言板功能
2016/12/21 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
JS实现页面进入和返回定位到具体位置
2016/12/08 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
浅析Python中的join()方法的使用
2015/05/19 Python
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
python抓取网页中链接的静态图片
2018/01/29 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
python实现感知器算法(批处理)
2019/01/18 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
了解AppleTalk协议吗
2014/04/01 面试题
垃圾回收的优点和原理
2014/05/16 面试题
办护照工作证明范本
2014/01/14 职场文书
高中考试作弊检讨书
2014/01/14 职场文书
农民工创业典型事迹
2014/01/25 职场文书
学校门卫管理制度
2014/01/30 职场文书
2014年毕业演讲稿范文
2014/05/13 职场文书
责任担保书范文
2014/05/21 职场文书