2014-04-25 75 views
0

我想解析只使用python的日誌文件中的特定行的時間戳。這是從文件的行:如何只解析字符串的時間戳

Mar 29 06:12:42 10.11.100.22 [info.events] [WARNING] 10.11.100.22: event, 1234

我怎麼只能從這個時間戳?這是我在一分鐘內使用的代碼,它從文件中找到包含單詞「WARNING」的行,然後獲取時間戳。

def is_Warning(self,line): 
    if line.find("WARNING") >= 0: 
     ts = time.strptime(line, "%b %d %H:%M:%S") 
     print "==================== %s" % ts 

當我運行此我得到一個 'ValueError異常:未轉換的數據仍然是:10.11.100.22 [info.events] [警告] 10.11.100.22:事件,1234'

誰能幫助?

回答

2

使用正則表達式。

import re 

... 

def is_warning(self,line): 
    if line.find("WARNING") >= 0: 
     date = re.match(r"[A-Za-z]{3} \d{1,2} \d{2}:\d{2}:\d{2}",line).group() 
     ts = time.strptime(date, "%b %d %H:%M:%S") 
     print("===================== %s" % ts 

注意time是一個很老的模塊。如果你只需要一段時間,你應該使用datetime.datetime.strptime(date, format).time()

1

strptime應匹配整個字符串,而不僅僅是開頭。既然你知道了生產線的長度,你可以這樣做:

ts = time.strptime(line[:15].strip(), "%b %d %H:%M:%S") 

的[15]的方法只會返回字符串中的前15個字符,這是你唯一需要的字符。

+0

只要「天」是一個零填充值,這個工作。如果3月3日是'3月3日06:12:42'',那麼尾部空格會打破它。你可以使用'line [:15] .strip()',但它會比我的答案更快! –

+0

你當然是對的,我會改變它的。謝謝:) –

+0

這工作,謝謝! :) – user3216736