使用python检查yaml配置文件是否符合要求


Posted in Python onApril 09, 2020

我就废话不多说了,大家还是直接看代码吧!

# coding=utf-8
 
import logging
import yaml
import os
import sys
 
reload(sys)
sys.setdefaultencoding("utf-8")
 
# 获取当前目录的路径
cur_dir = os.path.abspath('.')
 
 
def check_dt_pacsscp(config):
 """
 用来检查文件配置是否正确
 """
 #将配置config.yaml配置文件以字典方式读取
 dts_method = config['service']['method']
 dts_dup_check = config['service']['pacsscp_dup_check_off']
 dts_interval = config['scheduler']['interval']
 #判断对接方式是否是pacsscp
 if dts_method == 'pacsscp':
  if dts_dup_check == True and dts_interval == 3:
    return True
  else:
    return False
 else:
  #打印error级别的错误
  print "\033[31m Error:method not is pacsscp!!!\033[0m"
  return False
 
if __name__ == "__main__":
 # 加载yaml配置
 config_yaml = os.path.join(cur_dir, 'config.yaml')
 with open(config_yaml, 'rt') as f:
  config = yaml.safe_load(f.read())
 
  #dt相关路径和配置
 dt_path = config['path']['docking-toolbox']
 dt_config_path = os.path.join(dt_path, 'config.yaml')
 with open(dt_config_path, 'rt') as f:
  dt_config = yaml.safe_load(f.read())
 
 if check_dt_pacsscp(dt_config):
  print (u"\033[32m 校验通过~\033[0m")
 else:
  print (u'\033[32m 校验未通过, 请检查配置!\033[0m ')

以下是用正则获取不是yaml配置文件的

# coding=utf-8
 
"""
作业要求, 完善check_txpacs_version函数
"""
 
import logging
import traceback
 
import yaml
import os
import sys
import re
 
reload(sys)
sys.setdefaultencoding("utf-8")
 
# 获取当前目录的路径
cur_dir = os.path.abspath('.')
 
def check_txpacs_version(config, constant):
 """
 高难度
 校验txpacs版本, 若版本<1.4, 则回调中不能出现received_start_timestamp和received_end_timestamp这两个参数,
 若不合法打印error级别的提示;
 校验txpacs的自动清理功能是否合法: 若dt版本<1.3.8, 则不做要求,
 若dt版本>=1.3.8, 则要求txpacs版本必须为1.5.1及以上版本, 且txpacs配置的clean_date需配置为正整数
 (docking-toolbox的版本号可以从文件'docking-toolbox/toolbox/utils/constant.py'中读取),
 若不合法打印error级别的提示.
 根据以上结果, 返回返回值.
 :param config: txpacs的配置
 :param constant: docking-toolbox/toolbox/utils/constant.py文件内容
 :return: True: 通过
    False: 不通过
 """
 # 获取txpacs的版本号
 jar_file = os.listdir(txpacs_path)
 jar_file.sort(reverse=True)
 jar_ver = jar_file[0]
 jar_version = re.search('txpacs-(.*?).jar', jar_ver)
 #txpacs的版本号
 txpacs_version = jar_version.group(1)
 #docking-tools的版本号
 dt_version = re.search('DT_VERSIONS.*?"(.*?)"',constant).group(1)
 
 #打开txpacs的配置文件
 with open(txpacs_config_path, 'rt') as f:
  txpacs_file = f.read()
 #判断txpacs的版本号是否小于1.4
 if txpacs_version < '1.4':
  #判断received_start_timestamp" and "received_end_timestamp"两个参数是否出现在txpacs配置文件中
  if "received_start_timestamp" and "received_end_timestamp" not in txpacs_file:
   return True
  else:
   print "\033[31m Error:当前的txpacs版本号是txpacs-%s ,不应该存在received_start_timestamp和received_end_timestamp\033[0m"%txpacs_version
   return False
 #如果txpacs版本号大于等于1.4
 else:
  #判断DT版本是否大于1.3.8
  if dt_version >= '1.3.8':
   if txpacs_version >= '1.5.1':
    if config['store']['clean_date'] > 0:
     return True
    else:
     print "\033[31m Error:txpacs配置文件中clean_date应为正整数 \033[0m"
     return False
   else:
    print "\033[31m Error:当前DT版本大于1.3.8,txpacs版本必须大于等于1.5.1\033[0m"
    return False
  else:
   return True
 
if __name__ == "__main__":
 # 加载yaml配置
 config_yaml = os.path.join(cur_dir, 'config.yaml')
 with open(config_yaml, 'rt') as f:
  config = yaml.safe_load(f.read())
 
 # txpacs相关路径和配置
 txpacs_path = config['path']['txpacs']
 txpacs_config_path = os.path.join(txpacs_path, 'conf.yml')
 
 with open(txpacs_config_path, 'rt') as f:
  txpacs_config = yaml.safe_load(f.read())
 
 # dt相关路径和配置
 dt_path = config['path']['docking-toolbox']
 dt_constant_path = os.path.join(dt_path, 'toolbox', 'utils', 'constant.py')
 with open(dt_constant_path, 'rt') as f:
  dt_constant = f.read()
 
 if check_txpacs_version(txpacs_config, dt_constant):
  print (u"\033[32m 校验通过~\033[0m")
 else:
  print (u'\033[32m 校验未通过, 请检查配置! \033[0m')

以上这篇使用python检查yaml配置文件是否符合要求就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
动态创建类实例代码
Oct 07 Python
跟老齐学Python之变量和参数
Oct 10 Python
python根据给定文件返回文件名和扩展名的方法
Mar 27 Python
JPype实现在python中调用JAVA的实例
Jul 19 Python
python中获得当前目录和上级目录的实现方法
Oct 12 Python
Python实现一个简单的验证码程序
Nov 03 Python
python使用logging模块发送邮件代码示例
Jan 18 Python
浅谈Python中的私有变量
Feb 28 Python
python解析json串与正则匹配对比方法
Dec 20 Python
python快速排序的实现及运行时间比较
Nov 22 Python
Python参数传递及收集机制原理解析
Jun 05 Python
jupyter notebook远程访问不了的问题解决方法
Jan 11 Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 #Python
python实现简单学生信息管理系统
Apr 09 #Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 #Python
pycharm的python_stubs问题
Apr 08 #Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 #Python
解决pycharm下pyuic工具使用的问题
Apr 08 #Python
解决pyqt5异常退出无提示信息的问题
Apr 08 #Python
You might like
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
php中的curl使用入门教程和常见用法实例
2014/04/10 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
php while循环控制的简单实例
2016/05/30 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
2011/03/03 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
javascript实现tab切换的四种方法
2015/11/05 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
Python实现的批量下载RFC文档
2015/03/10 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
在python中使用with打开多个文件的方法
2019/01/07 Python
python计算无向图节点度的实例代码
2019/11/22 Python
django迁移文件migrations的实现
2020/03/31 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
HTML5移动端手机网站开发流程
2016/04/25 HTML / CSS
金融专业应届生求职信
2013/11/02 职场文书
毕业生个人自荐书
2015/03/05 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
手术室消毒隔离制度
2015/08/05 职场文书
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python