Python脚本在特定时间间隔内匹配日期

时间:2016-04-14 15:21:58

标签: 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 hr之间发生的此类访问请求的数量。 尝试类似的事情:

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)

有人可以建议正确使用模式来获取所需的数据。

3 个答案:

答案 0 :(得分:0)

re.search()即使没有匹配也会求值为true,因为ir返回一个SRE对象,并且[1]上的正则表达式错误,你想要:

你想:

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

答案 1 :(得分:0)

您的正则表达式可以正常工作,但问题是您使用的是两个斜杠而不是一个斜杠。所以你应该把它写成'[0-9][0-9]/Mar/2016:[1]'

请注意,要转义字符,您应该在前面添加反斜杠(\)而不是正斜杠(/)。但在这里,你不需要逃避任何事情。

答案 2 :(得分: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>

如果你想把你的日子作为变量传递。

关于Joao Pinto,如果没有匹配,搜索将返回none: https://docs.python.org/3.5/library/re.html