2016-04-14 58 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