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 相关文章推荐
pyqt4教程之widget使用示例分享
Mar 07 Python
Python logging模块学习笔记
May 24 Python
Python中尝试多线程编程的一个简明例子
Apr 07 Python
Python读写配置文件的方法
Jun 03 Python
CentOS中使用virtualenv搭建python3环境
Jun 08 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
Apr 26 Python
python获取程序执行文件路径的方法(推荐)
Apr 26 Python
详解python中的线程与线程池
May 10 Python
Python爬虫爬取电影票房数据及图表展示操作示例
Mar 27 Python
浅谈python3打包与拆包在函数的应用详解
May 02 Python
python 管理系统实现mysql交互的示例代码
Dec 06 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编程过程中需要了解的this,self,parent的区别
2009/12/30 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
2013/06/26 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
php限制文件下载速度的代码
2015/10/20 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
React Native 混合开发多入口加载方式详解
2019/09/23 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
[50:11]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第三场
2018/04/09 DOTA
virtualenv实现多个版本Python共存
2017/08/21 Python
Python反射的用法实例分析
2018/02/11 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
HTML5 拖放功能实现代码
2016/07/14 HTML / CSS
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
Wallis官网:英国女装零售商
2020/01/21 全球购物
迪士尼西班牙官方网上商店:ShopDisney西班牙
2020/02/02 全球购物
工程造价专业大专生求职信
2013/10/06 职场文书
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
高校教师思想汇报
2014/01/11 职场文书
会计岗位说明书
2014/07/29 职场文书
2015年见习期工作总结
2014/12/12 职场文书
数学备课组工作总结
2015/08/12 职场文书
Golang二维数组的使用方式
2021/05/28 Golang
移除Selenium中window.navigator.webdriver值
2022/06/10 Python