re python 引擎_Python-表名规则引擎-军刀集锦- re / configparser / xlsxwriter
常用的三个模块:
1、正则匹配 re;
2、配置文件解析 configparser;
3、excel 持久化 xlsxwriter;
做个集锦备忘,同时实现了简单的表名规则引擎。
import configparser
import re
import xlsxwriter
import time
# 命名规则匹配类
class MyRule:
_rule_dict = None
# 规则由两个维度 bk/fc 进行索引
def __init__(self, bk_list, fc_list):
self._rule_dict = dict()
for bk in bk_list:
self._rule_dict[bk] = dict()
for fc in fc_list:
self._rule_dict[bk][fc] = list()
# 注册规则,支持模糊注册
def reg(self, rule, bk=None, fc=None):
if bk is None and fc is not None:
for _bk in self._rule_dict.keys():
self._rule_dict[_bk][fc].append(rule)
elif bk is not None and fc is None:
for _fc in self._rule_dict[bk].keys():
self._rule_dict[bk][_fc].append(rule)
elif bk is None and fc is None:
for _bk in self._rule_dict.keys():
for _fc in self._rule_dict[_bk].keys():
self._rule_dict[_bk][_fc].append(rule)
elif bk is not None and fc is not None:
self._rule_dict[bk][fc].append(rule)
# 正则表达式,规则匹配
def match(self, bk, fc, s):
for r in self._rule_dict[bk][fc]:
res = re.fullmatch(r, s)
if res is None:
return False, r
elif res.string != s:
return False, r
return True, None
# excel 持久化类
class MyXlsx:
_workbook = None
def __init__(self, file_name):
self._workbook = xlsxwriter.Workbook(file_name) # 创建新的 xlsx 文件,如果文件已存在,内容会被清空
def write_xlsx(self, sheet_name, title, data):
worksheet = self._workbook.add_worksheet(sheet_name) # 添加新的 sheet
worksheet.write_row('A1', title) # 添加标题列
i = 1
for row in data:
worksheet.write_row(i, 0, row) # 写入一行
i += 1
def close(self):
self._workbook.close()
def main():
cf = configparser.ConfigParser()
cf.read('table_name_std.ini') # 读取配置文件
bk_list = cf.sections() # 读取分区标识,即: [xxxx] 的内容
res_xls = MyXlsx(time.strftime('命名规范%Y%m%d.xlsx'))
title = ('总表数', '英文表名异常数量', '英文表名异常比例')
rule_en = MyRule(bk_list, fc_pro) # 英文表名规则
# 英文名:后缀规则
rule_en.reg('.*_(' + '|'.join(pt_sign) + ')$')
result_total_data = []
result_detail_data = {}
for bk in bk_list:
fc_list = cf.options(bk) # 分层列表
table_cnt = table_en_fail_cnt = table_ch_fail_cnt = 0
for fc in fc_list:
project_name = cf.get(bk, fc)
tables = list_tables(project=project_name)
for table in tables:
res_en, r_en = rule_en.match(bk, fc, table.name)
res_ch, r_ch = rule_ch.match(bk, fc, table.comment)
table_en_fail_cnt += 0 if res_en else 1
table_ch_fail_cnt += 0 if res_ch else 1
table_cnt += 1
print(bk, table_cnt, table_en_fail_cnt, table_ch_fail_cnt)
result_total_data.append((bk, table_cnt,
table_en_fail_cnt, '%.2f%%' % (table_en_fail_cnt/table_cnt),
table_ch_fail_cnt, '%.2f%%' % (table_ch_fail_cnt/table_cnt)))
res_xls.write_xlsx('概括', title, result_total_data)
res_xls.close()
if __name__ == '__main__':
main()
re python 引擎_Python-表名规则引擎-军刀集锦- re / configparser / xlsxwriter相关推荐
- 【规则引擎】一、规则引擎简介
(第一章规则引擎学习入门之规则引擎简介)# 系列文章目录 规则引擎简介 前言 一.为什么要使用规则引擎? 1.不使用规则引擎的规则执行现状 2. 规则引擎优点 二.规则引擎的功能 三.规则引擎的分类实 ...
- 公司 表名规则 TN基础表 TR关系表 TL定义表
公司 表名规则 TN基础表 TR关系表 TL定义表
- 规则引擎一:IBM规则引擎 ODM入门
转自http://www.cnblogs.com/soul-tap/p/4956052.html IBM规则引擎(ODM)入门系列一(1):如何编写规则项目 最近,因项目需要,研究使用IBM的规则引擎 ...
- mysql存储引擎静态表_MySQL存储引擎(表类型)的选择
一.MySQL存储引擎概述 MySQL与多数数据库不同的是包含存储引擎这一特性,用户可以根据应用的需要选择合适的存储引擎来使存储和索引数据,以及是否使用事务等.MySQL5.0支持的存储引擎包括MyI ...
- 规则引擎 java 设计_规则引擎设计
最近用到了规则引擎 ,简单做一个总结. 规则,说白了,就是,现状(fact)怎么样,如果(condition)怎么样,那么(action)怎么样. 规则引擎使用了rete算法,我这边使用的是drool ...
- mysql 规则引擎_为什么使用规则引擎?
一天,朱斯参加了一场code Review研讨会.会上的一群人正在讨论着如何对祖传代码进行变更,大家你一言,我一语,场面十分热闹! 突然,只见人群中的一个人满面愁容,说道:"昨天在项目中看到 ...
- java开源的规则引擎_Java常用的规则引擎
概述 在本文中,我们将介绍Java中一些最受欢迎的规则引擎. 规则引擎简介 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编 ...
- java开发引擎_【java规则引擎】java规则引擎搭建开发环境
Drools and jBPM consist out of several projects:(Drools软件包提供的几个部分的功能) ------------------------------ ...
- java 规则引擎_【java规则引擎】java规则引擎搭建开发环境(示例代码)
Drools and jBPM consist out of several projects:(Drools软件包提供的几个部分的功能) ------------------------------ ...
最新文章
- 国标流媒体H5实现无插件视频监控按需直播
- 【Python学习】 - PIL - 各种图像操作
- python中mysqldb模块_python中MySQLdb模块用法实例
- 爱站CMS综合管理系统源码php版
- seg代码配置的踩坑记录
- creat是什么意思中文翻译_英语create的中文是什么意思
- 使用Faster_RCNN做文本检测
- python模块 包 文件_Python临时文件模块
- 【虚拟机】关于 virtualbox 和 vmware workstation 对比的个人见解
- 图书馆占座系统(五)
- 微信小程序---详情页
- DW_axi_dmac控制器(概述)
- 恐怖系列丨互联网幕后攻防:咳血的独角兽二
- Linux线程ID与内核LWP的关系
- 这猪蹄是人类能吃完的?
- JAVA Swing + Jdbc 实现宿舍管理系统
- 悦然插件资源分享:WooCommerce Order Details订单详情插件
- QT/C++从新手到老手系列之QT中级篇-李浩林-专题视频课程
- google+teachable_machine+树莓派4B
- C语言程序设计谭浩强(第四版)部分课后习题作答——第六章-输出杨辉三角,输出魔方阵