반응형
프로젝트를 수행하던 중 장비의 장애정보를 telnet에 접속하여 받아와야 하는데
모듈 작성중 아래와 같은 경우가 존재하였음.
정상적인 데이터를 받는경우
정상적인 데이터를 받지 않는경우(정해진 규칙보다 크거나 작은경우)
DATA ( 구분자 "|")
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 정상적인 경우 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 |& |
1 2 3 4 5 6 7 8 | >>> data = "1|1A|1B|1C|1D|1E||1XX|" >>> dataSpl = data.split( "|" ) >>> print dataSpl [ '1' , '1A' , '1B' , '1C' , '1D' , '1E' , ' ', ' 1XX ', ' '] >>> len (dataSpl) 9 |
1 2 3 4 5 6 7 | >>> 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 4 5 6 | 1. 데이터의 정상여부 체크 2. 정상적인 데이터의 경우 - 아무 문제 없음. 3. 비정상적인 데이터의 경우 - data를 정해진 규칙대로 split 하여 추출한 다음 추출한 문자열을 queue에 저장, 마지막 남은 data의 split.length가 정해진 규칙의 split.length 보다 적은경우 나머지 데이터를 저장한 후 다시 받은 데이터의 앞부분에 이어 붙여 데이터의 유실방지 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #!/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 |