본문 바로가기
Python

IOS version 파일을 이용한 텍스트 파일명과 실 장비명 비교

by Ao1 2023. 2. 2.

IOS_version_Name_Check.zip
0.01MB

import glob
import re
import os
import argparse

SEARCH_NAME = str(input('실행한 Command(sh ver | show ver) : '))

parser = argparse.ArgumentParser()
parser.add_argument('-p', metavar='[File_path]', required=True, help='File path', type=str)
args = parser.parse_args()

path = args.p                                       # 디렉토리 경로
s_ch = os.listdir(path)                             # 디렉토리 내 파일 리스트                                                        
c_ch = []                                           # .log 확장자 파일 리스트
f_name_arg = []                                     # 파일 이름 리스트

PATH_DIR = './Default'

# 디렉토리 생성
def createDir(DIR):
    if not os.path.exists(DIR):
        os.makedirs(DIR)

createDir(PATH_DIR)

for i in range(0,len(s_ch)):
    f_name, f_ext = os.path.splitext(s_ch[i])       # 파일 이름과 확장자 분리

    if f_ext == '.log':                             # .log 확장자 파일 분리
        c_ch.append(s_ch[i])
        f_name_arg.append(f_name)


for x in range(0,len(c_ch)):
    cut_count = 0                                       # 컷팅 카운터
    one_count = []                                      # 첫번째 컷팅 카운터 저장 배열
    two_count = []                                      # 마지막 컷팅 카운터 저장 배열

    with open(path + '/' + c_ch[x], 'r', encoding='utf-8') as file: # 첫번째 컷팅 카운터 확인
        count = 0
        data = file.readlines()
        for line in data:
            count += 1
            if SEARCH_NAME in line:
                one_count.append(count)

    with open(PATH_DIR + '/' + f_name_arg[x] + '.log', 'w', encoding='utf-8') as file: # 첫번째 컷팅 카운터 확인 후 작성
        count = 0
        file.seek(0)
        for line in data:
            file.write('')
            count += 1
            if int(one_count[0]) -1 < count:
                file.write(line)

    with open(path + '/' + c_ch[x], 'r', encoding='utf-8') as file: # 두번째 컷팅 카운터 확인
        count = 0
        data = file.readlines()
        for line in data:
            count += 1
            if 'Copyright (c)' in line:
                two_count.append(count)

    with open(PATH_DIR + '/' + f_name_arg[x] + '.log', 'w', encoding='utf-8') as file: # 두번째 컷팅 카운터 확인 후 작성
        count = 0
        file.seek(0)
        for line in data:
            count += 1
            if int(two_count[0]) > count:
                file.write(line)
            else:
                file.truncate()

DEFAULT_PATH = os.path.dirname(os.path.abspath(__file__))

SEARCH_TEXT = "Cisco IOS Software"
START_TEXT = "Version "
END_TEXT = " RELEASE"
DELETE_TEXTLINE = "sh cdp ne"

DATA = ['Version']
ASIS_NAME = ['AS-IS']
TOBE_NAME = ['TO-BE']

VERSION_LINE = re.compile(SEARCH_TEXT)
DEVICE_LINE = re.compile(SEARCH_NAME)

for i in glob.glob(DEFAULT_PATH + '/Default' + r'\*.log'):  # glob를 이용하여 해당 디렉토리 안에 있는 log 확장자 파일 검색
    with open(i, 'r',errors = 'ignore') as f:   # 파일 오픈
        for x, y in enumerate(f.readlines(),1): # 문자열 검색
            version_data = VERSION_LINE.findall(y)
            device_name = DEVICE_LINE.findall(y)
            if version_data:
                START_NUM = y.find(START_TEXT)
                END_NUM = y.find(END_TEXT)
                DATA.append(y[START_NUM+8:END_NUM-1])
            if device_name:
                END_NUM = y.find(SEARCH_NAME)
                ASIS_NAME.append(os.path.basename(i)[:-4])
                if y[0:END_NUM-1] != os.path.basename(i)[:-4]:
                    TOBE_NAME.append(y[0:END_NUM-1])
                else:
                    TOBE_NAME.append(" ")
     
csv_f = open(DEFAULT_PATH + "\IOS Version_NC.csv", "w")
for i in range(len(ASIS_NAME)):
    csv_f.write(ASIS_NAME[i] + ',' + TOBE_NAME[i] + ',' + DATA[i] + '\n')

csv_f.close

'Python' 카테고리의 다른 글

paramiko ssh 접속 개선판 (수정2)  (0) 2024.01.24
R&S 파이썬 자동화 개선판  (0) 2023.03.03
IOS version 추출  (2) 2023.02.01
Auto_Command Gui  (0) 2022.12.02
Log File -> Cfg File -> CSV File (fortigate 방화벽 정책 한정)  (0) 2022.08.31