Python yml配置文件实例

目录

安装

封装实例

目录结构

功能封装

运行结果


安装

pip3 install PyYaml

封装实例

目录结构

test_yml/
├── config
│   ├── config.py
│   ├── config.yml
│   └── __pycache__
│       └── config.cpython-38.pyc
├── lib
│   ├── pathutil.py
│   ├── __pycache__
│   │   ├── pathutil.cpython-38.pyc
│   │   └── singleton.cpython-38.pyc
│   └── singleton.py
└── main.py

功能封装

lib/singleton.py(单例模式)

#! /usr/bin/env python
# -*- coding: utf-8 -*-# 单例模式
def Singleton(cls):_instance={}def _singleton(*args,**kwagrs):if cls not in  _instance:_instance[cls]=cls(*args,**kwagrs)return _instance[cls]return _singleton

lib/pathutil.py(常用获取路径封装)

#! /usr/bin/env python
# -*- coding: utf-8 -*-import os def base_dir():return os.path.dirname(os.path.dirname(os.path.abspath(__file__)))def config_dir():return os.path.join(base_dir(), "config")def path_join(path):return os.path.join(base_dir(), path)

config/config.py(获取配置)

#! /usr/bin/env python
# -*- coding: utf-8 -*-import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))import yaml
import tracebackfrom lib.singleton import Singleton
from lib.pathutil import path_join@Singleton
class Config(object):def __init__(self) -> None:self.config = Nonedef __parse_config(self) -> None:  # sourcery skip: simplify-generatorconfig = Noneself.config = {'host' : [],'port' : [],'cookie' : '','mrs' : []}with open(path_join('config/config.yml'), 'r', encoding="utf-8") as f:config = yaml.load(f, Loader=yaml.SafeLoader)try:for h in config['host']:self.config['host'].append(h)for p in config['port']:self.config['port'].append(p)self.config['cookie'] = config['cookie'] for m in config['matchreplace']:self.config['mrs'].append(m)except Exception as e:print("Error: 配置解析出错,请检查")traceback.print_exc()exit(0)def get_config(self) -> dict:if self.config is None:self.__parse_config()return self.configdef check_config(self) -> bool :if ('host' not in self.config) or ('cookie' not in self.config) or ('mrs' not in self.config):print("Error: 配置出错,请检查")return Falseif type(self.config['host']) != list or type(self.config['mrs']) != list or type(self.config['cookie']) != str:print("Error: 配置出错,请检查")return False if self.config['cookie'] == '':print("Error: 配置出错,请检查,cookie不能为空")return Falsereturn True

config/config.yml(yml配置文件)

# 对于哪些域名进行越权漏洞检测,可以写正则表达式,正则re.compile()不通过的会被认为是纯字符串,不含端口
host:- "localhost"- ".*\\.aaa\\.com"- "127.0.0.1"# port表示对上述域名的哪些端口, 写数字就表示精准匹配端口,写字符串表示端口的正则表达式,如果不想限制端口直接写 ".*" 即可(表示匹配任意)
port:- 80- "1\\d{4}"- ".*"# cookie直接全量替换,所以要写全,有多少个cookie字段写多少个。
cookie: "JSESSION=Y1ng.VIP; x-csrf-token=123123123; signature=12346576788"# matchreplace会做替换# pattern可以写正则表达式,如果不能成功执行正则re.compile()则会被认为是纯字符串,,replace则为替换后的字符串(而非正则表达式)# location可以有以下几种选项# URL 对URL做替换# PATH 对PATH路径做替换# HEADER 对请求头做替换,当替换HEADER时,replace为一个对象,name表示对应头部名,value是匹配的头部值的正则# BODY 对POST传输的BODY部分做替换
matchreplace: - {location: "URL",pattern: "_signature=2Cw00QAAAAA9GaIS4KF.M9gsNMAALwH",replace: "_signature=2RlsxgAAAAA8LPoFKkjFZNkZbNAALrU",}- {location: "HEADER",pattern:  "Bareer .*$" ,replace:  { name: "Authorization", value: "Bareer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" },}

main.py(测试的主文件)

#! /usr/bin/env python
# -*- coding: utf-8 -*-from config.config import Configif __name__ == "__main__":config = Config().get_config()if not Config().check_config():exit(0)print(config)

运行结果

{'host': ['localhost', '.*\\.aaa\\.com', '127.0.0.1'],'port': [80, '1\\d{4}', '.*'],'cookie': 'JSESSION=Y1ng.VIP; x-csrf-token=123123123; signature=12346576788','mrs': [{'location': 'URL','pattern': '_signature=2Cw00QAAAAA9GaIS4KF.M9gsNMAALwH','replace': '_signature=2RlsxgAAAAA8LPoFKkjFZNkZbNAALrU'}, {'location': 'HEADER','pattern': 'Bareer .*$','replace': {'name': 'Authorization','value': 'Bareer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'}}]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/644714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

38-WEB漏洞-反序列化之PHPJAVA全解(下)

WEB漏洞-反序列化之PHP&JAVA全解(下) 一、Java中API实现二、序列化理解三、案例演示3.1、本地3.2、Java 反序列化及命令执行代码测试3.3、WebGoat_Javaweb 靶场反序列化测试3.4、2020-网鼎杯-朱雀组-Web-think_java 真题复现 四、涉及资源 一、Java中…

springboot118共享汽车管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的共享汽车管理系统 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获…

『论文阅读|2024 WACV 多目标跟踪Deep-EloU|纯中文版』

论文题目: Iterative Scale-Up ExpansionIoU and Deep Features Association for Multi-Object Tracking in Sports 论文特点: 作者提出了一种迭代扩展的 ExpansionIoU 和深度特征关联方法Deep-EIoU,用于体育场景中的多目标跟踪,旨…

pc端vue封装高德地图实现定位 PlaceSearch搜索

首先安装 amap/amap-jsapi-loader 官网教程 mapContainer.vue <template><div class"container-map" :style"styleObj"><!-- change"changeInput" type"text" --><a-input idtipinput v-model:value"input…

C++从零开始的打怪升级之路(day20)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前&#xff0c;我学了一点点C语言还有简单的数据结构&#xff0c;如果有小伙伴想和我一起学习的&#xff0c;可以私信我交流分享学习资料 那么开启正题 今天分享的是关于vector的题目 1.只出现一次的数字3 260. 只出…

基于springboot家政服务管理平台源码和论文

随着家政服务行业的不断发展&#xff0c;家政服务在现实生活中的使用和普及&#xff0c;家政服务行业成为近年内出现的一个新行业&#xff0c;并且能够成为大众广为认可和接受的行为和选择。设计家政服务管理平台的目的就是借助计算机让复杂的销售操作变简单&#xff0c;变高效…

深圳 福田区 建筑模型 su rhino

深圳 福田区 建筑模型 su rhino 只有福田区的&#xff0c;其他区的没有&#xff0c;其他市的没有 模型有skp&#xff0c;obj格式 模型如图 部分数据&#xff1a;

部署网站时遇到请求出现状态码206,可能是nginx配置问题

在部署网站系统的时候&#xff0c;部分接口出现状态码206&#xff0c;导致功能不能正常使用&#xff0c;经过排查&#xff0c;猜测可能是nginx配置中出现的问题。 目录 一、问题原因 二、解决办法 一、问题原因 当使用Nginx作为代理服务器时&#xff0c;确实存在一个代理缓存…

常用电子器件学习——三极管

三极管介绍 三极管&#xff0c;全称应为半导体三极管&#xff0c;也称双极型晶体管、晶体三极管&#xff0c;是一种电流控制电流的半导体器件其作用是把微弱信号放大成幅度值较大的电信号&#xff0c; 也用作无触点开关。晶体三极管&#xff0c;是半导体基本元器件之一&#xf…

浅学JAVAFX布局

JAVAFX FlowPane布局 Flowpane是一个容器。它在一行上排列连续的子组件&#xff0c;并且如果当前行填充满了以后&#xff0c;则自动将子组件向下推到一行 public class FlowPanedemo extends Application {Overridepublic void start(Stage stage) throws Exception {stage.s…

肺癌相关文献6

第十四篇 Classification of lung adenocarcinoma based on stemness scores in bulk and single cell transcriptomes IF&#xff1a;6.0 中科院分区:2区 生物学WOS分区&#xff1a;Q1被引次数&#xff1a; 4 背景&#xff1a;癌细胞具有无限期自我更新和增殖的能力[2]。在一…

Spring Security 6.x 系列【72】授权篇之角色分层

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列Spring Security 版本 6.1.0 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 前言2. RoleHierarchy3. 案例演示3.1 期望3.2 集成3.2 测试4. 源码分析4…

python基础学习-03 安装

python3 可应用于多平台包括 Windows、Linux 和 Mac OS X。 Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等等。)Win 9x/NT/2000Macintosh (Intel, PPC, 68K)OS/2DOS (多个DOS版本)PalmOSNokia 移动手机Windows CEAcorn/RISC OSBeOSAmigaVMS/OpenVMSQNXVxWorksP…

高校寝室卫生检查系统UML建模——活动图

学生查看历史的通知公告学生投诉寝室卫生检查 学生查看其他寝室的卫生情况 发起报修请求

取消默认进入conda的base环境

文章目录 输入命令&#xff1a; conda config --set auto_activate_base false即可

【强化学习】QAC、A2C、A3C学习笔记

强化学习算法&#xff1a;QAC vs A2C vs A3C 引言 经典的REINFORCE算法为我们提供了一种直接优化策略的方式&#xff0c;它通过梯度上升方法来寻找最优策略。然而&#xff0c;REINFORCE算法也有其局限性&#xff0c;采样效率低、高方差、收敛性差、难以处理高维离散空间。 为…

Vue3全局组件和自定义指令

目录 全局组件 全局指令 局部指令 全局组件 全局组件是在main.js中注册的&#xff0c;通过app实例.component创建 main.js import { createApp } from vue import App from ./App.vue //导入组件 import CustormComp from ./components/CustormComp.vue // 创建App实例挂载…

【centos7安装docker】

背景&#xff1a; 学习docker&#xff0c;我是想做一个隔离环境&#xff0c;并且部署的话&#xff0c;希望实现自动化&#xff0c;不为安装软件而烦恼&#xff0c;保证每个人的环境一致。 2C4G内存 50G磁盘的虚拟机事先已经准备完毕。 1.查看下centos版本&#xff0c;docker要…

CorLoc(Correct Localization)是什么?

“Correct Localization”&#xff08;CorLoc&#xff09;是一种用于评估目标检测模型性能的指标&#xff0c;强调模型是否能够准确地定位目标对象。该指标通常在训练数据上使用&#xff0c;用于检测模型对目标位置的精确性。 以下是对CorLoc的详细说明&#xff1a; 1.目标检测…

【大数据】Flink 系统架构

Flink 系统架构 1.Flink 组件1.1 JobManager1.2 ResourceManager1.3 TaskManager1.4 Dispatcher 2.应用部署2.1 框架模式2.2 库模式 3.任务执行4.高可用设置4.1 TaskManager 故障4.2 JobManager 故障 Flink 是一个用于状态化并行流处理的分布式系统。它的搭建涉及多个进程&…