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处理中文编码和判断编码示例
Feb 26 Python
Python 常用的安装Module方式汇总
May 06 Python
Python实现选择排序
Jun 04 Python
python中文分词教程之前向最大正向匹配算法详解
Nov 02 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
Feb 07 Python
pandas多级分组实现排序的方法
Apr 20 Python
django框架模型层功能、组成与用法分析
Jul 30 Python
python redis 批量设置过期key过程解析
Nov 26 Python
python对文件的操作方法汇总
Feb 28 Python
Python操作MongoDb数据库流程详解
Mar 05 Python
Python使用xpath实现图片爬取
Sep 16 Python
总结三种用 Python 作为小程序后端的方式
May 02 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
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
深入理解PHP 数组之count 函数
2016/06/13 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
JS简单计算器实例
2015/01/20 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
Prototype框架详解
2015/11/25 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
微信小程序 选项卡的简单实例
2017/05/24 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
node实现分片下载的示例代码
2018/10/17 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
python爬虫之快速对js内容进行破解
2019/07/09 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
英国健康和美容技术产品购物网站:CurrentBody
2019/07/17 全球购物
初中成绩单评语
2014/12/29 职场文书
单位考核鉴定意见
2015/06/05 职场文书
军训新闻稿范文
2015/07/17 职场文书
心理健康教育培训研修感言
2015/11/18 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫