回顾:上一篇文章讲了4个函数,分别是:
第一个函数:数字大小写转换函数:num_to_char
第二个函数:标题自动生成函数:get_title
第三个函数:知识库函数:get_knowledge
第四个函数:文件目录读取函数:list_dir
今天数一下主函数的构成:
在main函数下开始实际开始:
第一步:读取指定路径下的所有文件,并逐个读取文件及分隔符:
file_dir= 'D:\\巡检2020-9-8\\' # 别问为啥\\是两个,就是这样的,转义用把,没仔细研究过 file_all = list_dir(file_dir)# 前面定义的list_dir函数 for i in range(len(file_all)):#这个for循环就是循环读取文件的及处理文件最外层的循环 file = file_all[i] f = open(file, 'r', encoding='UTF-8')#打开文件,要用UFT-8格式,后面,所有的操作都围绕这个f文件展开 #下面,我们要从文件中读取所有的分隔符,并且将分割赋所在的一行,放入到list中保存 #实际上,list中存放的,也是我们的巡检项目标题,,例如:Check file system#### 这样的内容,表示要巡检文件系统了。 lines = f.readlines() number = [] for lss in lines: m = re.findall(r"####", lss) if m: number.append(lss) f.close() ##用完文件关闭是个好习惯 for j in range(len(number)): print(number[j]) # 现在,试着把这个类型是list的number变量打印出来,这样,我们就获取了所有的分隔标题了。
复制
第二步:用正则表达式查找文件内容:
for j in range(len(number)): k = j + 1 # 设置K,是为了防止最后一位溢出,因为最后一行是没有j+1的 if k < len(number): fenge1 = number[j] fenge2 = number[j + 1] fenge1 = fenge1.replace('\n', '') print(f'{k}:开始查找{fenge1}相关的内容') xj_title = get_title(fenge1)# 前面定义的get_title函数 if xj_title == 'PLNOCHECK': # 有PLNOCHECK,是不体现在报告里面的东西,只是我们自己看的,就跳出本次循环 continue daxie = num_to_char(k) title = f'巡检{daxie}:{xj_title}' #生成了巡检标题,样例:巡检一:数据库详细检查 Docx.add_heading(title, level=1) Docx.add_heading("1、巡检结果:", level=2) pat = re.compile(fenge1 + '(.*)' + fenge2, re.S) #定义pat正则表达式规则 result = pat.findall(buff) #result 就是我们要巡检的内容了!!!
复制
第三步:对获取到result 进行格式化处理
for match1 in result: # 去掉多余的回车,有一个回车就够了,我们的巡检结果往往会自动输出很多回车 match1 = match1.replace('\n\n', '') #去掉你想指定的所有某个字符后所有的字符,例如本例用将match1中从CHECKJCSQL开始后的所有文字都删除了。 #当然也不是非要这么做,只是告诉一个方法,很多时候,尤其在巡检数据库的时候 #可能带有一些SQL的上下文输出,写在报告里很不美观 match1 = match1[:match1.rfind('CHECKJCSQL')] #去掉开头结尾没用的空格 match1 = match1.rstrip() match1 = match1.lstrip() #这样,match1 就是我们需要的巡检内容了。
复制
第四步:将巡检内容写入word中
Docx = Document() # p = Docx.add_heading(level=0) run = p.add_run('ORACLE巡检报告') #上面的代码设置了一个一级标题,说明本文档的主要内容 #下面开始增加一个表格,一行一列的,显示巡检内容: table = Docx.add_table(rows=1, cols=1, style='Table Grid') hdr_cells = table.rows[0].cells hdr_cells[0].text = match1 Docx.add_heading("2、分析结果:", level=2) table2 = Docx.add_table(rows=1, cols=1, style='Table Grid')
复制
做完以后,效果是这样的:
这样,就把巡检报告的架子搭出来了。
还有一些需要优化的东西,例如我们想搞一个丰富一点的表格、记录所有已知的巡检异常点、自定义输出不同的文件名称等,在下一次讲解。
# 完全原创,大晚上码字,不容易啊,点赞再走吧。
(关键是摩天轮的文本格式不太会用,python是严格讲究代码格式的,复制出来就没有了,写备注也对应的不是很好)
最后修改时间:2020-09-13 19:35:58
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
大佬6666哇
4年前

1