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")

 

posted @ 2020-06-08 04:43  Bomao  阅读(30)  评论(0)    收藏  举报