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 |