실용주의 프로그래머를 읽으면서 간편하게 사용가능한 스크립트를 하나 배워야 겠다는 생각을 하고 있었는데.. 고민은
perl을 배워보느냐,
python을 다시 시작하느냐 였다.. 사실 python은 다시 시작한다고 하기엔 좀 억지가 있긴 하지만.. 뭐, 아는게 있어야지 다시지..
펄 쪽으로 생각이 기울다, 결국엔 기왕 시작한거 제대로 해보자는 생각에 python 책을 다시 보기 시작했고, 그냥 책만 보면 재미가 없으니 일에 적용시켜보기로 했다.. 웹로그 분석을 할 일이 생겼는데, 특정 요청만 골라내서 이 요청에 대한 분석을 해야했다.. 일반적인 로그분석 프로그램에서 이걸 어떻게 하는지 몰라 고민끝에 파이썬으로 스크립트를 짜보기로 했다.. 당근 익숙치 않으니 맘 먹고 하루 밤을 새주기로 했다.. 까짓거 하루밤 정도 투자해주면 이정도 스크립트는 가능하겠지..
import re
resultFile = open('result_setupxml.txt','w')
i = 1
for i in range(1,28) :
if i<10 :
myfile = open("ex05090" + str(i) + ".log","r")
else :
myfile = open("ex0509" + str(i) + ".log","r")
lines = myfile.readlines()
myfile.close()
matchstring = re.compile("/setup.xml",re.IGNORECASE)
for line in lines :
times = matchstring.search(line,1)
if times :
resultFile.writelines(line)
resultFile.close()
myfile = open('result_setupxml.txt','r')
lines = myfile.readlines()
myfile.close()
matchstringTime = re.compile("[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}",re.IGNORECASE)
matchstringDate = re.compile("[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}",re.IGNORECASE)
matchstringIP = re.compile("[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}",re.IGNORECASE)
myfile = open('result_setupxml.csv','w')
for line in lines :
times = matchstringTime.search(line,0)
dates = matchstringDate.search(line,0)
ips = matchstringIP.search(line,40)
myfile.writelines(dates.group(0)+","+times.group(0)[0:2]+","+ips.group(0)+"
")
myfile.close()
결과물이 완벽하지는 못하지만, 그런대로 파이썬을 배워가며 처음 만들어본 스크립트로는 이정도면 만족하기로 했다.. 정규표현식을 가지고 특정 파일의 요청을 뽑아내고, 이를 IP별, 날짜별, 시간대별로 분석하기 위한 정규표현식을 더 만들어 뽑아냈다..
이걸 C++로 작성했어도 그리 어렵지 않았을 것이라는 생각이 들기도 했지만, 생산성 측면에서는 확연한 차이가 있었다.. 컴파일 / 빌드 시간이 없기 때문에 무수한 소스수정 / 실행 / 테스트의 과정이 매우 신속했으며, 위의 프로그램 실행속도 역시 무지하게 빨랐다.. 수백메가 이상의 로그 파일들을 여러개 가지고 실행을 했음에도 실행속도가 꽤 빠르다는 느낌이 들어 만족스럽다..
앞으로는 이런 상황의 프로그램 작성에는 파이썬을 적극 활용해보기로 했다.. 밤새고 다음날 근무하느라 피곤하긴 했지만, 매우 만족스런 경험이었다.. 배운거 바로 써먹는 이런 재미에 프로그래밍도 하는 것이 아닐까..
꼬리말 : 2006.02.11
구글에서는 파이썬을 어디에 쓰나요 (
원문보기)
주로 C++을 사용한다고 하는데
SWIG라는 툴을 사용하는 것으로 보아 다른 프로그래밍 언어들도 아주 활발히 사용하고 있는 것 같다.. 워낙에 뛰어난 프로그래머들이 많아서 자바를 사용한다는 부분이 참 재밌다..