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 相关文章推荐
如何解决django配置settings时遇到Could not import settings 'conf.local'
Nov 18 Python
Python类的专用方法实例分析
Jan 09 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 Python
深入理解python多进程编程
Jun 12 Python
解析Python中的__getitem__专有方法
Jun 27 Python
python append、extend与insert的区别
Oct 13 Python
python如何拆分含有多种分隔符的字符串
Mar 20 Python
Django使用unittest模块进行单元测试过程解析
Aug 02 Python
python将图片转base64,实现前端显示
Jan 09 Python
python能在浏览器能运行吗
Jun 17 Python
详解Python魔法方法之描述符类
May 26 Python
Python OpenCV之常用滤波器使用详解
Apr 07 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
function.inc.php超越php
2006/12/09 PHP
基于PHP常用函数的用法详解
2013/05/10 PHP
php实现水仙花数的4个示例分享
2014/04/08 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
Track Image Loading效果代码分析
2007/08/13 Javascript
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
javascript offsetX与layerX区别
2010/03/12 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
2013/03/29 Javascript
checkbox设置复选框的只读效果不让用户勾选
2013/08/12 Javascript
js清空表单数据的两种方式(遍历+reset)
2014/07/18 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
详解使用nvm管理多版本node的方法
2017/08/30 Javascript
详解 vue better-scroll滚动插件排坑
2018/02/08 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
2019/03/07 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
CSS3转换功能transform主要属性值分析及实现分享
2012/05/06 HTML / CSS
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
linux面试相关问题
2013/04/28 面试题
学习标兵获奖感言
2014/02/20 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
2015年元旦标语大全
2014/12/09 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
2019入党申请书格式
2019/06/25 职场文书
python批量更改目录名/文件名的方法
2021/04/18 Python