반응형
프로젝트를 수행하던 중 장비의 장애정보를 telnet에 접속하여 받아와야 하는데
모듈 작성중 아래와 같은 경우가 존재하였음.
정상적인 데이터를 받는경우
정상적인 데이터를 받지 않는경우(정해진 규칙보다 크거나 작은경우)
DATA ( 구분자 "|")
# 정상적인 경우 1|1A|1B|1C|1D|1E||1XX| 2|2A|2B|2C|2D|2E||2XX| 3|3A|3B|3C|3D|3E||3XX| 4|4A|4B|4C|4D|4E||4XX| 5|5A|5B|5C|5D|5E||5XX| # 비정상적인 경우 11|11A|11B|11C|11D|11E||11XX|12|12A|12B|12C|12D|12E||12XX|13|13A|13B|13C|13D|13E||13XX|14|14A|14B|14C|14D|14E||14XX|15|15A|15B|15C|15D|15E||15XX|21|21A|21B|21C| 21D|21E||21XX| # 정상적인 경우 7|7A|7B|7C|7D|7E||7XX|&Python console (정상적인 경우)
>>> data = "1|1A|1B|1C|1D|1E||1XX|" >>> dataSpl = data.split("|") >>> print dataSpl ['1', '1A', '1B', '1C', '1D', '1E', '', '1XX', ''] >>> len(dataSpl) 9Python console (비정상적인 경우)
>>> data = "11|11A|11B|11C|11D|11E||11XX|12|12A|12B|12C|12D|12E||12XX|13|13A|13B|13C|13D|13E||13XX|14|14A|14B|14C|14D|14E||14XX|15|15A|15B|15C|15D|15E||15XX|21|21A|21B|21C|" >>> dataSpl = data.split("|") >>> print dataSpl ['11', '11A', '11B', '11C', '11D', '11E', '', '11XX', '12', '12A', '12B', '12C', '12D', '12E', '', '12XX', '13', '13A', '13B', '13C', '13D', '13E', '', '13XX', '14', '14A', '14B', '14C', '14D', '14E', '', '14XX', '15', '15A', '15B', '15C', '15D', '15E', '', '15XX', '21', '21A', '21B', '21C', ''] >>> len(dataSpl) 45 >>>처리방법
1. 데이터의 정상여부 체크 2. 정상적인 데이터의 경우 - 아무 문제 없음. 3. 비정상적인 데이터의 경우 - data를 정해진 규칙대로 split 하여 추출한 다음 추출한 문자열을 queue에 저장, 마지막 남은 data의 split.length가 정해진 규칙의 split.length 보다 적은경우 나머지 데이터를 저장한 후 다시 받은 데이터의 앞부분에 이어 붙여 데이터의 유실방지Python Source
#!/bin/env python # -*- coding: utf-8 -*- # # 기능 설명 : # TEST import os import time # test용 #basicNum = 8 #txtName = "a.txt" # itas용 basicNum = 53 txtName = "a2.txt" fp = open("C:\\python27\\test\\%s" % txtName) dataLine = fp.readlines() restData = "" for data in dataLine : data = data.replace("\x1b\x03", "") # garbage 데이타 삭제 if restData != "": print "restData 존재하여 data앞에 붙이기" print "%s + %s" % (restData, data) data = restData + data restData = "" dataSpl = data.split("|") if len(dataSpl) -1 == basicNum : # 정상적인 데이터 print "정상 : ", data elif len(dataSpl) -1 > basicNum : data2 = data.rstrip("\r\n"); data2 = data2.replace("\x1b\x03", "") # garbage 데이타 삭제 saveData = "" dataSpl2 = data2.split("|") sumCnt = 0 tmpData = data2 for i in range( len(dataSpl2) / basicNum ): tmpDataSpl = tmpData.split("|") for j in range(basicNum): saveData += tmpDataSpl[j]+"|" sumCnt = sumCnt+1 print "추출한 문자 : ", saveData saveData = "" findText = dataSpl2[sumCnt] findIndex = data2.find(findText) tmpData = data2[findIndex:] ''' print "검색어 : ", findText print "검색어 위치 ", findIndex print "찾아야할 문자를 찾는 방법 : tmpData = data2[%d:]" % findIndex print "찾은문자 : %s" % tmpData ''' print "" restData = tmpData #print "restData = ", restData continue elif len(dataSpl) -1 < basicNum : restData = data continue print "" print "=============================================" print restData
이글을 누가 볼지 모르겠지만 혹시나 첨부파일이 필요한경우 댓글로 요청하시면 등록해드리겠습니다.
반응형
'컴퓨터관련' 카테고리의 다른 글
Linux - 필요한 화일만 골라서 복사하기 (0) | 2016.01.20 |
---|---|
Java - 시작일과 종료일 사이의 날짜 구하기 (0) | 2016.01.20 |
Python - import가 안될때 확인해야할 사항 (0) | 2016.01.20 |
Eclipse jsp, js 파일 때문에 버벅거리고 느려질때 해결방법 (0) | 2016.01.20 |
ORACLE - 시작일자와 종료일자 사이의 날짜 가져오기 (0) | 2016.01.20 |