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程序添加图形化界面的教程
Apr 29 Python
python抓取网页中图片并保存到本地
Dec 01 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
python机器学习实战之树回归详解
Dec 20 Python
python机器学习理论与实战(五)支持向量机
Jan 19 Python
Pyinstaller将py打包成exe的实例
Mar 31 Python
python 堆和优先队列的使用详解
Mar 05 Python
利用python实现汉字转拼音的2种方法
Aug 12 Python
tensorflow 分类损失函数使用小记
Feb 18 Python
django rest framework serializers序列化实例
May 13 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 Python
python入门之算法学习
Apr 22 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将会员数据导入到ucenter的代码
2010/07/18 PHP
PHP的可变变量名的使用方法分享
2012/02/05 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
php遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
浅谈php安全性需要注意的几点事项
2014/07/17 PHP
php构造函数的继承方法
2015/02/09 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
python 生成不重复的随机数的代码
2011/05/15 Python
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
CSS3实现酷炫的3D旋转透视效果
2019/11/21 HTML / CSS
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
两道JAVA笔试题
2016/09/14 面试题
编辑求职信样本
2013/12/16 职场文书
马云北大演讲完整版:真心话,什么才是阿里的核心竞争力?
2014/04/04 职场文书
项目负责人任命书
2014/06/04 职场文书
讲党性心得体会
2014/09/03 职场文书
财务会计实训报告
2014/11/05 职场文书
营业用房租赁协议书
2014/11/26 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
2016年12月份红领巾广播稿
2015/12/21 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL
Python编程super应用场景及示例解析
2021/10/05 Python