python 第一天
验收文档举例检查
import xlwings as xw from datetime import date import re import os import xlwt output_list = [] #第一部分:定义函数 def PAT_Check( filename ): print() #打开txt文档 # f = open("./filename","r",encoding='utf-8') #z打开txt文件, f = open("./source/" + filename, "r", encoding='utf-8') # z打开txt文件 data=f.readlines() #循环文本总的每一行,得到的是一个列表的格式 f.close() source_list = [] for line in data: # 0.1. site name if re.search(">display fan",line): site_name=re.search("<.*>",line) result=("site_name: "+site_name.group()) source_list.append(result) site_value=site_name.group() # 0.2获取管理ip elif re.search("Vlanif201 ",line): manager_ip= re.search("10.\d*.\d*.\d*", line) result=("site_ip: "+manager_ip.group()) source_list.append(result) # 1 check banner elif re.search("header login file cfcard:/banner.txt",line): result= "1 banner check is ok" source_list.append(result) # 2 >display license elif re.search(" Expired date : PERMANENT",line): result= "2 permanent License is ok" source_list.append(result) # 3 display version elif re.search("V300R005C10SPC100",line): result= "3 version check is ok" source_list.append(result) # 4 >Display telnet server elif re.search("TELNET server : Disable",line): result= "4 telnet IPV4 server disable is ok" source_list.append(result) # 5 >Display telnet ipv6 server elif re.search("IPv6 server state : Disabled",line): result= "5 telnet IPV6 server disable is ok" source_list.append(result) # 6 >ftp-server ipv4 elif re.search("Server state : Disabled",line): result= "6 ftp-server IPV4 disable is ok" source_list.append(result) # 7 >authentication-mode local radius elif re.search(" authentication-mode local radius",line): result= "7 authentication-mode local radius is ok" source_list.append(result) # 8 authentication radius-10.64.165.67 elif re.search("authentication 10.64.165.67 1812 weight 0",line): result= "8 configuration radius 10.64.165.67 is ok" source_list.append(result) # 9 authentication 10.14.65.65 elif re.search("authentication 10.14.65.65 1812 weight 0",line): result= "9 configuration radius 10.14.65.65 is ok" source_list.append(result) # 10 display current-configuration configuration ntp elif re.search("ntp-service authentication-keyid 1 authentication-mode md5 cipher %",line): result= "10. ntp is ok" source_list.append(result) # 11 display info-center elif re.search("Information Center:enabled",line): result= "11 info-center is ok" source_list.append(result) # 12 display logbuffer elif re.search("Logging buffer configuration and contents : enabled",line): result= "12 display logbuffer is ok" source_list.append(result) # 13 display clock elif re.search('Riyadh',line): result= "13 clock is ok" source_list.append(result) # 18 display fan elif re.search("Status : AUTO", line): result = "18 display fan is ok" source_list.append(result) #开始迭代查找: it = iter(data) for j in it: # 14 display current-configuration configuration aaa if re.search(">display current-configuration configuration aaa",j): #找到查询命令 # n=0 for n in range (42): next(it) #后面的第42行配置 ret = next(it) if re.search(site_value,ret, re.M): #如果第42行开始新配置,说明用户数量一致,检查用户数量是否一致。 result = "14 configuration aaa is ok" source_list.append(result) else: result = "14 configuration aaa abnormal" source_list.append(result) #15 >display ssh server status if re.search(">display ssh server status",j): #找到查询命令 ret = next(it) # if re.search(r"\SSH Version : 2.0",ret,re.M): #。 result = "15 ssh server statusis ok" source_list.append(result) else: result = "15 ssh server statusis abnormal" source_list.append(result) #16 “display device”. if re.search(">display device",j): #找到查询命令 for n in range (5): # next(it) #后面的第42行配置 ret = next(it) if re.search(r"CXP Present Registered Normal MMB 0 Master",ret, re.M): #如果第42行开始新配置,说明用户数量一致,检查用户数量是否一致。 result = "16 display device is ok" source_list.append(result) else: result = "16 display device abnoraml" source_list.append(result) #17 display alarm active”. if re.search(">display alarm active",j): #找到查询命令 ret = next(it) #后面的第42行配置 if re.search(site_value,ret,re.M): #。 result = "17 display alarm active is ok" source_list.append(result) else: result = "17 display alarm active abnormal" source_list.append(result) # 19 ssh access-list if re.search(">display current-configuration configuration user-interface",j): #找到查询命令 for n in range (10): # next(it) #后面的第42行配置 ret = next(it) if re.search(r" protocol inbound ssh",ret, re.M): #如果第42行开始新配置,说明用户数量一致,检查用户数量是否一致。 result = "19 ssh access-list is ok" source_list.append(result) else: result = "19 ssh access-list is abnoraml" source_list.append(result) list_repeat =list(set(source_list)) #去重复 list_repeat.sort(key=None, reverse=True) #排序 output_list.append(list_repeat) print(output_list) print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~1 PAT check finish~~~~~~~~~~~~~~~~~~~") #第二部分:调用函数 file_dir = "./source/" list1 = os.listdir(file_dir) # print(list1[0]) for filename in list1: f = open("./source/" +filename, "r", encoding='utf-8') # z打开txt文件 PAT_Check(filename) # for m in output_list: # print(m) # #第三部分: copy to excel ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ app=xw.App(visible=True,add_book=False) workbook=app.books.add() workbook.sheets.add("result") sht1=workbook.sheets["result"] #打开工作表/指定sheet ## # #第一列 添加标签 sht1.range("A1").value=["Check result"] #从第二行开始输出: flag =1 for site_x in output_list: # print(site_x) flag += 1 # 整行表格字符串 Str_sheet1 = "A" + str(flag) sht1.range(Str_sheet1).value = site_x # 全部输入成一行中 # sht1.range("A2").value=source_list 全部输入成一行中。 # # def len_byte(value): # length = len(value) # utf8_length = len(value.encode('utf-8')) # length = (utf8_length - length) / 2 + length # return int(length) # # 确定栏位宽度 # col_width = [] # for i in range(len(site_x)): # for j in range(len(site_x[i])): # if i == 0: # col_width.append(len_byte(site_x[i][j])) # else: # if col_width[j] < len_byte(str(site_x[i][j])): # col_width[j] = len_byte(site_x[i][j]) # # # 设置栏位宽度,栏位宽度小于10时候采用默认宽度 # for i in range(len(col_width)): # if col_width[i] > 10: # worksheet.col(i).width = 256 * (col_width[i] + 1) workbook.save("./1.PAT Result.xlsx") workbook.close() app.quit() print("PAT check completed, plese open file: 1.PAT Result")

浙公网安备 33010602011771号