2016-05-02 65 views
-4

這是代碼:在Python 2.7,如何提取和打印日期,時間,以及更

#!/usr/bin/env python 

#Import the datetime 
from datetime import datetime 
import re 

#Create two datetime object for limit 1 and limit 2 as dt1 and dt2 respectively 
dt1 = datetime.strptime("01:00:00","%H:%M:%S").time() 

dt2 = datetime.strptime("04:59:59","%H:%M:%S").time() 

#Create a compiler for regular expression 
init_re = re.compile(r'(INIT)') 

time_re = re.compile(r'(\d+:\d+:\d+)') 

# read line from test.log file 
for line in open("test.log", "r"): 

     match = time_re.search(line) #Search time format for each line 
     if match: 
      matchtime = match.group(1) 
      dt_match = datetime.strptime(matchtime, '%H:%M:%S').time()  
       #Time formmat match 
       if dt_match >= dt1 and dt_match <= dt2: 
        match1 = init_re.search(line) #search INIT format 
        if match1: 
         matchinit = match1.group(0) 
         print match.string.strip() 

下面是日誌文件的一部分的區域:

2015-12-15 00:51:01,904 INFO restser.py 113 [INIT] [netkv_restser: peek] [req_id: f0aa7ab5-6192-4231-93cd-82a53936a072] [request: {u'key_space': u'martech_user_index', u'table_name': u'nettopic', u'key': 9569}]

我想輸出像這樣:

[Date: ] [Time: ] [INIT] [netkv_restser: ] [req_id: ] 

實施例:

[Date:2015-12-15 ] [Time:00:51:01,904 ] [INIT] [netkv_restser:peek ] [req_id:f0aa7ab5-6192-4231-93cd-82a53936a072 ] 

注意:如果您足夠好地編輯代碼,請提供足夠的解決方案。我不想聽起來粗魯,但它讓我感到厭煩。

注意:我正在使用Python 2.7.6。

+5

爲什麼你問[一個問題(http://stackoverflow.com/questions/36975197/how-to-extract-specific-data-from-a-string )多次? – EbraHim

+0

我想要幫助而沒有人提供它,所以我重建了我的代碼並再次提問。Buddy,Help out no。 –

+0

問兩次對你沒有任何幫助,根據SO規則是不合法的。不想聽起來很粗魯,但我編輯了你最後一個問題,並留下了一個答案。 – EbraHim

回答

0

您可以使用正則表達式來分析每條日誌行。這取決於你的日誌文件的結構是多麼的固定,但是這對你提供的輸入行起作用。

template = '[Date:%s] [Time:%s] [%s] [netkv_restser:%s] [req_id:%s]' 
details = re.search('(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2},\d{3}).*\[(INIT)\].*\[netkv_restser: *(.*?)\].*\[req_id: *(.*?)\]',s).groups() 
output = template % details 

輸出

'[Date:2015-12-15] [Time:00:51:01,904] [INIT] [netkv_restser:peek] [req_id:f0aa7ab5-6192-4231-93cd-82a53936a072]' 

當然也可以compile正則表達式,包括在遍歷文件中的行

pattern = re.compile('(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2},\d{3}).*\[(INIT)\].*\[netkv_restser: *(.*?)\].*\[req_id: *(.*?)\]') 
template = '[Date:%s] [Time:%s] [%s] [netkv_restser:%s] [req_id:%s]' 
for line in open("test.log", "r"): 
    details = re.search(pattern, line).groups() 
    print template % details 
+0

我添加了一個基於你的代碼的例子。 'search'的輸出是一個元組。 '%s'是一個字符串的佔位符。您使用格式運算符'%'替換佔位符值的元組 – Francesco

+0

如果您看看示例,您需要的所有內容 – Francesco

+0

回溯(最近調用最後一次): 文件「testcase1.py」,第32行,在 打印模板%詳細信息 TypeError:格式字符串的參數不足 –

0

我張貼的答案,因爲它是太好了! ! 特別感謝Mr.Francesco先生和Mr.EbraHim先生。

!在/ usr /斌/包膜蟒蛇

進口自DATETIME進口日期時間日期時間

進口重新

的限制1和限制2爲DT1及DT2創建兩個DateTime對象分別

DT1 = datetime.strptime( 「00:00:00」, 「%H:%M:%S」)。時間()

DT2 = datetime.strptime(「03: 59:59" , 「%H:%M:%S」)時間()

爲正則表達式編譯器創建

time_re = re.compile(R'(\ d +:\ d +:\ d + )')

pattern = re.compile('(\ d {4} - \ d {2} - \ d {2})(\ d {2}:\ d {2}:\ d {2 },\ d {3})。 [(INIT)]。 [netkv_restser:。?)] * [REQ_ID:(?)。 ')

設置模板輸出

模板='[日期:%s]的[時間: %s] [%s] [netkv_restser:%s] [req_id:%s]'

for line in open(「sample。日誌」, 「R」):

match = time_re.search(line) #Search time format for each line 
    matchtime = match.group(1) 
    #Time format match 
    dt_match = datetime.strptime(matchtime, '%H:%M:%S').time() 
    if dt_match >= dt1 and dt_match <= dt2: #time limit is set 
     #print value 
     detail = re.match(pattern, line) 
     if detail: 
      print template % detail.groups() 
相關問題