로그를 읽고 해석하여 가장 낮은 시작 번호 (머리)를 얻고 인쇄하는 간단한 프로그램을 작성했습니다. 나는이 프로그램을 편집하고 실제 로그 파일을 파싱하기 위해 작성한 클래스와 결합합니다. 본질적으로, 이전 프로그램의 로그에서 간단한 숫자를 기준으로 정렬하는 것과는 대조적으로 이제는 한 클래스의 구문 분석 된 정보를 다른 클래스로 참조해야합니다. 이 작업을 수행하는 가장 편리한 방법이 무엇인지 궁금 해서요. 나는 초보 프로그래머로서 파이썬에서 클래스를 명시 적으로 참조 할 수 있는지 알지 못한다.다른 클래스의 한 클래스 사용
다음은 클래스입니다.
파서
class LogLine:
SEVERITIES = ['EMERG','ALERT','CRIT','ERR','WARNING','NOTICE','INFO','DEBUG']
severity = 1
def __init__(self, line):
try:
m = re.match(r"^(\d{4}-\d{2}-\d{2}\s*\d{2}:\d{2}:\d{2}),?(\d{3}),?(\s+\[(?:[^\]]+)\])+\s+[A-Z]+\s+(\s?[a-zA-Z0-9\.])+\s?(\((?:\s?\w)+\))\s?(\s?.)+", line)
timestr, msstr, sevstr, self.filename, linestr, self.message = m.groups()
self.line = int(linestr)
self.sev = self.SEVERITIES.index(sevstr)
self.time = float(calendar.timegm(time.strptime(timestr, "%Y-%m-%d %H:%M:%S,%f"))) + float(msstr)/1000.0
dt = datetime.strptime(t, "%Y-%m-%d %H:%M:%S,%f")
except Exception:
print 'error',self.filename
def get_time(self):
return self.time
def get_severity(self):
return self.sev
def get_message(self):
return self.message
def get_filename(self):
return self.filename
def get_line(self):
return self.line
분류기는
class LogFile:
def __init__(self,filepath):
self.logfile = open(filepath, "r")
self.head = None
def __str__(self):
return "x=" + str(self.x) + "y="+str(self.y)
def readline(self):
if self.head != None:
h = self.head
self.head = None
return h
else:
return self.logfile.readline().rstrip(' ')
def get_line(self):
if self.head == None:
self.head = self.readline().rstrip(' ')
return self.head.get.line()
else:
return self.head.get.line()
def close (self):
self.logfile.close()
나는 get_line 기능을 추가하여 내 두 번째 클래스를 편집하기 시작했다. 내가 올바른 길을 가고 있는지 모르겠다.
간단 측면에서, 나는
. 분명한 대답을 주셔서 감사합니다. 후속 조치를 취하기 위해 클래스 외부에서 클래스 메서드를 호출 할 수 있습니까? 예를 들어, 가장 낮은 t를 찾기위한 함수를 작성했습니다. 'DEF get_line_with_lowest_t (로그) 범위의 I lowest_i = -1 (LEN (로그)) t = 로그 [I] .get_t() == 경우 lowest_i -1 또는 t
Raj
네,'logs'가'LogLine' 인스턴스의리스트라면,'logs [i] .get_line()'을 사용하여'. get_line()'메소드 함수는리스트에서'i'의 위치에 저장됩니다. – steveha
감사합니다. 아마도 일관성에 대한 코드를 살펴볼 수 있습니까? 어떤 일이 잘못되면 고칠 필요가 없습니다. 나는 지금 어떻게 구조화하는 법을 배움에 정말로 관심이 있습니다. 붙여 넣기 링크가있는 이메일을 쏠 수 있습니다. 그렇지 않다면, 나는 당신의 시간을 주셔서 감사합니다. – Raj