暂无图片
暂无图片
4
暂无图片
暂无图片
2
暂无图片

使用Python自动生成word巡检报告【二】

原创 red_hope 2020-09-10
3356

回顾:上一篇文章讲了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')
复制

做完以后,效果是这样的:
image.png

这样,就把巡检报告的架子搭出来了。
还有一些需要优化的东西,例如我们想搞一个丰富一点的表格、记录所有已知的巡检异常点、自定义输出不同的文件名称等,在下一次讲解。
# 完全原创,大晚上码字,不容易啊,点赞再走吧。
(关键是摩天轮的文本格式不太会用,python是严格讲究代码格式的,复制出来就没有了,写备注也对应的不是很好)

最后修改时间:2020-09-13 19:35:58
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

暂无图片
4年前
评论
暂无图片 0
大佬6666哇
4年前
暂无图片 点赞
1
red_hope
暂无图片
4年前
回复
暂无图片 0
不敢不敢,只是觉的做dba真的都很累,应该用自动化的手段解决问题
4年前
暂无图片 点赞
回复