简介

在实际开发过程中,我们可能需要读取一些配置文件的配置信息,例如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文件的更多相关文章

  1. Python读取Yaml文件

    近期看到好多使用Yaml文件做为配置文件或者数据文件的工程,随即也研究了下,发现Yaml有几个优点:可读性好.和脚本语言的交互性好(确实非常好).使用实现语言的数据类型.有一个一致的数据模型.易于实现 ...

  2. 使用python读取yaml文件

    在做APP测试时,通常需要把参数存到一个字典变量中,这时可以将参数写入yaml文件中,再读取出来. 新建yaml文件(android_caps.yaml),文件内容为: platformName: A ...

  3. python读取yaml文件,在unittest中使用

    python读取yaml文件使用,有两种方式: 1.使用ddt读取 2,使用方法读取ddt的内容,在使用方法中进行调用 1.使用ddt读取 @ddt.ddt class loginTestPage(u ...

  4. python读取yaml配置文件

    支持多种语言:python.js.golang.java.c.c++ YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写.它实质上是一种通用的数据串行化格式. 它的基本语法规则如下 ...

  5. Python读取txt文件

    Python读取txt文件,有两种方式: (1)逐行读取 data=open("data.txt") line=data.readline() while line: print ...

  6. python读取中文文件编码问题

    python 读取中文文件后,作为参数使用,经常会遇到乱码或者报错asii错误等. 我们需要对中文进行decode('gbk') 如我有一个data.txt文件有如下内容: 百度 谷歌 现在想读取文件 ...

  7. Python读取SQLite文件数据

    近日在做项目时,意外听说有一种SQLite的数据库,相比自己之前使用的SQL Service甚是轻便,在对数据完整性.并发性要求不高的场景下可以尝试! 1.SQLite简介: SQLite是一个进程内 ...

  8. Python读取xlsx文件

    Python读取xlsx文件 脚本如下: from openpyxl import load_workbook workbook = load_workbook(u'/tmp/test.xlsx') ...

  9. Python 读取WAV文件并绘制波形图

    aa Python 读取WAV文件并绘制波形图 ffmpeg -i test_pcm_mulaw.wav -f wav -codec:a pcm_s16le -ar 8000 -ac 1 out.wa ...

随机推荐

  1. NS2中couldn‘t read file “../tcl/mobility/scene/cbr-3-test“: no such file or directory解决方法

    运行wireless.tcl 文件时报错:couldn't read file "../../uAMPS/ns-leach.tcl": no such file or direct ...

  2. 面试简历书写、Flask框架介绍与快速使用、Flask演示登录页面、用户信息页面案例

    今日内容概要 面试简历编写 Flask框架介绍与安装 内容详细 1.面试简历编写 # 千万不要几个小时把简历凑出来 几天到一周 # 有没有面试机会,取决于简历写得怎么样 简历写好是第一步 # 投简历的 ...

  3. Spring Ioc源码分析系列--Ioc容器注册BeanPostProcessor后置处理器以及事件消息处理

    Spring Ioc源码分析系列--Ioc容器注册BeanPostProcessor后置处理器以及事件消息处理 前言 上一篇分析了BeanFactoryPostProcessor的作用,那么这一篇继续 ...

  4. 【Java8新特性】Lambda表达式

    一.Lambda 表达式 是什么? Lambda读音:拉姆达. Lambda是一个匿名函数,匿名函数就是一个没有名字的函数. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). ...

  5. 811. Subdomain Visit Count - LeetCode

    Question 811. Subdomain Visit Count Example 1: Input: ["9001 discuss.leetcode.com"] Output ...

  6. 使用 gitbook 制作自己的 html 文档

    使用 gitbook 制作自己的 html 文档 步骤如下 npm install gitbook-cli -g // 全局安装 gitbook-cli <span style="te ...

  7. hadoop联合hive基础使用

    sqoop路径:/opt/module/sqoop 把指定文件放到hadoop指定路径:hadoop fs -put stu1.txt /user/hive/warehouse/stu hive启动( ...

  8. 浅析kubernetes中client-go Informer

    之前了解了client-go中的架构设计,也就是 tools/cache 下面的一些概念,那么下面将对informer进行分析 Controller 在client-go informer架构中存在一 ...

  9. 使用argparse进行调参

    argparse是深度学习项目调参时常用的python标准库,使用argparse后,我们在命令行输入的参数就可以以这种形式python filename.py --lr 1e-4 --batch_s ...

  10. React简单教程-6-单元测试

    前言 我想大部分人的前端测试,都是运行项目,直接在浏览器上操作,看看功能正不正常.虽然明明有测试库可以使用,但是因为"要快"的原因,让好好做测试变成了一件影响效率的事. 因为这种无 ...