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的lambda语句声明匿名函数的用法
Jul 01 Python
python中的字典使用分享
Jul 31 Python
django解决跨域请求的问题
Nov 11 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
python树莓派红外反射传感器
Jan 21 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
Python lxml模块的基本使用方法分析
Dec 21 Python
Python利用逻辑回归分类实现模板
Feb 15 Python
通过python连接Linux命令行代码实例
Feb 18 Python
opencv 图像礼帽和图像黑帽的实现
Jul 07 Python
解决pytorch-gpu 安装失败的记录
May 24 Python
Python Matplotlib绘制动画的代码详解
May 30 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安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
PHP创建单例后台进程的方法示例
2017/05/23 PHP
PHP PDOStatement::debugDumpParams讲解
2019/01/30 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
莱鸟介绍javascript onclick事件
2016/01/06 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
深入浅析JavaScript中的3DES
2016/08/24 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
Angular 封装并发布组件的方法示例
2018/04/19 Javascript
Vue+axios实现统一接口管理的方法
2018/07/23 Javascript
vue js秒转天数小时分钟秒的实例代码
2018/08/08 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
python调用c++传递数组的实例
2019/02/13 Python
Python paramiko模块使用解析(实现ssh)
2019/08/30 Python
关于django 1.10 CSRF验证失败的解决方法
2019/08/31 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
Myprotein瑞典官方网站:畅销欧洲英国运动营养品牌
2018/01/22 全球购物
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
交通工程专业推荐信
2014/09/06 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
休假证明书
2015/06/24 职场文书
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL