python 读取yaml文件
简介
在实际开发过程中,我们可能需要读取一些配置文件的配置信息,例如ini、yaml、property等格式,本文将讲述怎么去获取和设置yaml文件的相关参数。
示例yaml文件
test1:
test2-1: 5
test2-2: 130000
test2-3:
test3-1: 123
test3-2: 256
使用到的模块
pip3 install PyYAML
读写yaml文件
import yaml, os, json
class YamlUtil():
def __init__(self, yaml_path):
self.yaml_path = yaml_path
def get_yml_data(self, is_modify=False, *key_names):
"""
读取yaml配置文件并根据对应层级的key获取对应的value
适用于两层数据
:param: key_names: 需要查询的yaml文件的key关键字,从左向右依次
:return: result: 根据key值返回对应value,不传key则直接返回所有, 没有对应key则返回None
"""
with open(self.yaml_path, "r", encoding="utf-8") as f:
content = f.read()
yaml_content = yaml.safe_load(content)
if is_modify:
return yaml_content
try:
for key_name in key_names:
yaml_content = yaml_content.get(key_name, None)
return yaml_content
except Exception as e:
print(f"get_yml_data error:{e}")
return None
def set_yaml_data(self, value, *key_names):
"""
设置yaml文件中的相关属性
:param: value:修改后的值
:param: key_names: 需要修改的yaml文件的key关键字,从左向右依次
"""
yaml_content = self.get_yml_data(True, key_names)
print(f'yaml_content:before:{yaml_content}')
key_name = ''
for item in list([[item] for item in key_names]):
key_name += str(item)
print(f'key_name:{key_name}')
command = "yaml_content" + key_name + '=' + str(value)
print(f'command:{command}')
# exec:将字符串转换成python代码执行
exec(command)
print(f'yaml_content:after:{yaml_content}')
with open(self.yaml_path, mode='w', encoding='utf-8') as f:
f.write(yaml.safe_dump(yaml_content))
if __name__ == '__main__':
YAML_PATH = os.path.join(os.path.dirname(__file__), 'test.yaml')
yamlUtil = YamlUtil(YAML_PATH)
print(yamlUtil.get_yml_data("test1", "test2-1"))
print(yamlUtil.get_yml_data("test1", "test2-3", "test3-1"))
yamlUtil.set_yaml_data(123, "test1", "test2-1")
yamlUtil.set_yaml_data(111, "test1", "test2-3", "test3-1")
获取属性采用的是将数据读取出来成字典,然后直接取出对应属性即可,设置属性采用的是读取原有数据,使用字典更新对应值的方式,不过是采用exec执行拼接的字符串方式。
python 读取yaml文件的更多相关文章
- Python读取Yaml文件
近期看到好多使用Yaml文件做为配置文件或者数据文件的工程,随即也研究了下,发现Yaml有几个优点:可读性好.和脚本语言的交互性好(确实非常好).使用实现语言的数据类型.有一个一致的数据模型.易于实现 ...
- 使用python读取yaml文件
在做APP测试时,通常需要把参数存到一个字典变量中,这时可以将参数写入yaml文件中,再读取出来. 新建yaml文件(android_caps.yaml),文件内容为: platformName: A ...
- python读取yaml文件,在unittest中使用
python读取yaml文件使用,有两种方式: 1.使用ddt读取 2,使用方法读取ddt的内容,在使用方法中进行调用 1.使用ddt读取 @ddt.ddt class loginTestPage(u ...
- python读取yaml配置文件
支持多种语言:python.js.golang.java.c.c++ YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写.它实质上是一种通用的数据串行化格式. 它的基本语法规则如下 ...
- Python读取txt文件
Python读取txt文件,有两种方式: (1)逐行读取 data=open("data.txt") line=data.readline() while line: print ...
- python读取中文文件编码问题
python 读取中文文件后,作为参数使用,经常会遇到乱码或者报错asii错误等. 我们需要对中文进行decode('gbk') 如我有一个data.txt文件有如下内容: 百度 谷歌 现在想读取文件 ...
- Python读取SQLite文件数据
近日在做项目时,意外听说有一种SQLite的数据库,相比自己之前使用的SQL Service甚是轻便,在对数据完整性.并发性要求不高的场景下可以尝试! 1.SQLite简介: SQLite是一个进程内 ...
- Python读取xlsx文件
Python读取xlsx文件 脚本如下: from openpyxl import load_workbook workbook = load_workbook(u'/tmp/test.xlsx') ...
- Python 读取WAV文件并绘制波形图
aa Python 读取WAV文件并绘制波形图 ffmpeg -i test_pcm_mulaw.wav -f wav -codec:a pcm_s16le -ar 8000 -ac 1 out.wa ...
随机推荐
- 第一个MVC程序
配置版 添加web的支持! 确定导入了SpringMVC 的依赖! 配置web.xml , 注册DispatcherServlet <?xml version="1.0" e ...
- 【Rust】使用HashMap解决官方文档中的闭包限制
问题概述 值缓存是一种更加广泛的实用行为,我们可能希望在代码中的其他闭包中也使用他们.然而,目前 Cacher 的实现存在两个小问题,这使得在不同上下文中复用变得很困难. 第一个问题是 Cacher ...
- kvm 虚拟化技术 1.3之kvm克隆以及快照
1.kvm虚拟机克隆 克隆kvm虚拟机 ,克隆前需要提前关机 语法: virt-clone -o 原虚拟机 -n 新虚拟机 -f 新虚拟机镜像存放路径 选项中-o 表示 old ...
- 一、全新安装搭建redis主从集群
前言· 这里分为三篇文章来写我是如何重新搭建redis主从集群和哨兵集群的及原本服务器上有单redis如何通过升级脚本来实现redis集群.(redis结构:主-从(备)-从(备)) 至于为什么要搭建 ...
- 143_Power BI&Power Pivot月度、季度、半年度、全年同维度展示
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 最近在做下一年度的预算,做出来需要月度.季度.半年度.全年都展示出来,在做测算的是时候,默认的透视表已经无法满足 ...
- JVM的类加载过程
每日一句 人到情多情转薄,而今真个不多情. 每日一句 The frog in the well knows nothing of the great ocean. 井底之蛙,不知大海. JVM 的类加 ...
- ML第一周学习小结
最近的学习内容为<Python机器学习基础教程>这本书 从第一章开始,慢慢来,比较快. 一下为我的本周机器学习小结,以及下周的Flag. 本周收获 总结一下本周学习内容: 1.了解到机器学 ...
- [补漏]shift&算法
题意:regular number 给你一个字符串,要你输出所有(每位都符合要求的)子串,输入时告诉你每位只能填的数集. 思路: bitsetc[x]存每个数字可以存在的字符串位的二进制集合.(如3可 ...
- springboot如何使用自定义配置文件
从前边<springboot竟然有5种默认的加载路径,你未必都知道>我们知道,springboot会默认加载application.properties/application.yml ...
- 0-1knapsack
Python 实现0-1背包问题(回溯法) 题目 解题思路 回溯法:为了避免生成那些不可能产生最佳解的问题状态,要不断地利用限界函数(bounding function)来处死那些实际上不可能产生所需 ...