파이썬 정규식 예제
정규표현식 테스트 사이트 : http://pythex.org/
미들만이라는 DB 감사툴을 이용하면 사용자들의 쿼리 로그를 남길 수 있다. 그런데, 이녀석이 불친절하게도 결과값을 엑셀로 export 해주지 않는다. 공부라도 해볼겸 해서 csv로 변환해보았다.
1 2 3 4 5 6 7 8 |
O1234567 조XX O1234567 toad.exe SEL 31-MAR-15 SELECT BASE_DATE BASE_DATE /* 기준_일자 O1234567 조XX O1234567 toad.exe SEL 31-MAR-15 SELECT NVL(B.BASE_DATE,'20170322') /* 기준_일자 */ O1234567 조XX O1234567 toad.exe SEL 31-MAR-15 select object_name nam, Decode(object_type, 'TABLE', 1, 'VIEW', 2, 3) typ from 위와 |
위와 같은 라인이 반복되는데, 컬럼간 간격도 불규칙하고, 한 라인에 하나의 row만 저장되는게 아니라서, 위와 같은 텍스트파일을 csv로 변환해서
엑셀에서 열수 있도록 해보았다.
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 |
import re fr = open("./middleman.log") #fr = open("./sample1.txt") fw = open("./data.csv","w") # O[0-9]{7}[ ]*([^ ]*)[ ]*O[0-9]{7} -> 사람 이름 뽑기 # ([0-9]{2}\-[A-Z]{3}\-[0-9]{2}) -> 날짜 # ([0-9]{2}\-[A-Z]{3}\-[0-9]{2})[ ]*(.*) -> 그룹2 : 쿼리 line_to_write_front = "" fw.write("사번,작업일,쿼리(일부)\n") while True: line = fr.readline() # O1205727 조현준 O1205727 toad.exe SEL 31-MAR-17 SELECT BASE_DATE BASE_DATE /* 기준_일자 if not line: break # 좌우 공백 지우기 line = line.strip() if line == "": continue emp_no = re.findall('(^O[0-9]{7}|^T[0-9]{7}|^K[0-9]{6})', line) if line_to_write_front != "": if len(emp_no) == 0: fw.write("\n"+ line.replace('"','""') ) continue else: fw.write( '"\n') date = re.findall('([0-9]{2}\-[A-Z]{3}\-[0-9]{2})', line) query = re.findall('([0-9]{2}\-[A-Z]{3}\-[0-9]{2})[ ]*(.*)', line) if len(emp_no) > 0: line_to_write_front = emp_no[0] + "," + date[0] + "," + '"' + query[0][1].replace('"','""') fw.write(line_to_write_front) emp_no = None date = None query = None fr.close() fw.close() |