2016-04-14 86 views
-1

到目前爲止,我們已經包含以下格式記錄在訪問日誌:Python腳本,以匹配特定的時間間隔

0.93 172.19.180.93 - - - [14/Mar/2016:11:07:22 +0130] "GET /MyWeb/appResources/css/ng-tags-input.min.css HTTP/1.1" 200 1077 **0/4864** 

現在,想用python腳本找出10.00之間發生這樣的接取請求的數量分析每一行到特定日期的19:00時。 嘗試一些像:

for fname in filenames_245: 
    with open(fname) as infile: 
     for line in infile: 
      if re.search('[0-9][0-9]//Mar//2016/:[1]',line): 
       outfile.write(line) 

可有人請建議模式來獲得所需數據的正確用法。

+0

所以你只匹配從01 /三月/ 2016這些日期到31 /月/ 2016:

關於若奧·平託,如果沒有匹配搜索返回沒有? –

+0

是的,我們每天有一個訪問文件。因此,我們將解析31個文件,以在3月份獲取應用程序總數。 – Aarati

回答

0

您的正則表達式可以正常工作,但問題是您使用的是兩個斜槓而不是一個斜槓。所以你應該把它寫成'[0-9][0-9]/Mar/2016:[1]'

請注意,要轉義字符,您應該用反斜槓(\)而不是正斜槓(/)加上它。但在這裏你不需要逃避任何事情。

0

re.search()的計算結果爲真實的,即使沒有匹配,因爲IR回報是一個SRE對象,你的正則表達式是錯誤的[1],你想:

你想:

re.findall('\d\d/Mar/2016:1', data) 
+0

如果日期的格式爲'55/InvalidMonth/3500:18:00' ...? –

+0

這個答案只解決了尋找一個特定的已知模式的問題。爲了適當的日期匹配和處理,需要更復雜的正則表達式。 –

0

嘗試:

>>> re.search("14/Mar/2016:1", line) 
<_sre.SRE_Match object at 0x7f37cd4179f0> 

>>> re.search("{0}/{1}/{2}:1".format(date, month, year), line) 
<_sre.SRE_Match object at 0x7f37cd417ac0> 
如果你想你的日子過的變量

https://docs.python.org/3.5/library/re.html