2012-07-09 52 views
0

我正在編寫一個程序,它基本上從日誌文件中拉出一行,解析它,並以簡化形式返回解析的數據。我目前的主要問題是我應該解析日期時間的方法。以下是日誌中的一行示例。日誌文件的將日期時間字符串轉換爲整數(秒),然後添加ms

例子:

2012-06-12 14:02:16,341 [main] INFO --- 
2012-06-12 14:02:16,509 [main] INFO --- 
2012-06-12 14:02:17,000 [main] INFO --- 
2012-06-12 14:02:17,112 [main] INFO --- 
2012-06-12 14:02:20,338 [main] INFO --- 
2012-06-12 14:02:21,813 [main] INFO --- 

我的代碼來解析至今(很粗糙):

class LogLine: 

    SEVERITIES = ['EMERG','ALERT','CRIT','ERR','WARNING','NOTICE','INFO','DEBUG'] 
    severity = 1 

    def __init__(self, line): 
     try: 
      t, s, self.filename, n, self.message = 
       re.match(r"^(\d\d\d\d-\d\d-\d\d[ \t]\d\d:\d\d:\d\d,\d\d\d)", line) 
      self.line = int(n) 
      self.sev = self.SEVERITIES.index(s) 
      self.time = time.strptime(t) 


    def get_t(self): 
     return 

    def get_severity(self): 
     return self.SEVERITIES.index(self) 
    def get_message(self): 
     return 
    def get_filename(self): 
     return 
    def get_line(self): 
     return 

所以基本上(如果你無法從我可怕的代碼來推斷)我我正在使用正則表達式解析字符串以獲取日期時間。我也一直在閱讀關於strptime作爲這種可能的解決方案。最後,我需要將日期時間解析爲毫秒,然後將其添加到日期時間中的毫秒整數(用逗號分隔)。

我確信這個問題非常複雜,我提前道歉。感謝您的幫助。

回答

0
>>> datetime.datetime.strptime('2012-06-12 14:02:16,341' + '000', '%Y-%m-%d %H:%M:%S,%f') 
datetime.datetime(2012, 6, 12, 14, 2, 16, 341000) 
+0

這是完美的。我唯一的問題是如何將這個應用到我當前的代碼中,從而使程序打開實際的日誌文件而不是簡單地提供一個字符串? – Raj 2012-07-09 21:31:16

+0

只需拆分第二個空格[每行](http://stackoverflow.com/questions/8009882/how-to-read-large-file-line-by-line-in-python)。 – 2012-07-09 21:33:15

+0

我明白了。這是否取代我的正則表達式?仍然有點困惑。 – Raj 2012-07-09 21:41:21

0

下面是如何解析行的例子:

>>> # A line from the logfile. 
>>> line = "2012-06-12 14:02:16,341 [main] INFO ---" 
>>> # Parse the line. 
>>> m = re.match(r"^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}),(\d{3}) \[([^]]*)\] (\S+) (.*)", line) 
>>> timestamp, line_number, filename, severity, message = m.groups() 
>>> # Show the various captured values. 
>>> timestamp 
'2012-06-12 14:02:16' 
>>> line_number 
'341' 
>>> filename 
'main' 
>>> severity 
'INFO' 
>>> message 
'---' 
相關問題