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实现从字符串中找出字符1的位置以及个数的方法
Aug 25 Python
Python中的元类编程入门指引
Apr 15 Python
python2.7到3.x迁移指南
Feb 01 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
May 27 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
使用python3批量下载rbsp数据的示例代码
Dec 20 Python
flask框架自定义url转换器操作详解
Jan 25 Python
Python2.x与3​​.x版本有哪些区别
Jul 09 Python
Python通过类的组合模拟街道红绿灯
Sep 16 Python
python mock测试的示例
Oct 19 Python
详细介绍python操作RabbitMq
Apr 12 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程序之die调试法 快速解决错误
2009/09/17 PHP
通用PHP动态生成静态HTML网页的代码
2010/03/04 PHP
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
Javascript学习笔记2 函数
2010/01/11 Javascript
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
Jquery网页出现的乱码问题的三种解决方法
2013/06/30 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
js改变embed标签src值的方法
2015/04/10 Javascript
Bootstrap3制作搜索框样式的方法
2016/07/11 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
2018/08/31 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
flask入门之表单的实现
2018/07/18 Python
Flask之flask-script模块使用
2018/07/26 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
学校七一活动方案
2014/01/19 职场文书
幼儿园教师奖惩制度
2014/02/01 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
C++程序员求职信
2014/05/07 职场文书
欢迎词范文
2015/01/27 职场文书
Django操作cookie的实现
2021/05/26 Python