在Python中的两个日期之间提取日志文件中条目的最快方法是什么?

时间:2013-09-01 20:15:28

标签: python date logging

我在每个日志文件的不同位置都有日期和时间的日志文件。我想打印两个日期之间的各种日志文件中的条目到标准输出?例如:我想要前24小时的条目,或者我想要前一周的条目。

在Python中实现这一目标的有效方法是什么?

Kinds Regards,Hendre

3 个答案:

答案 0 :(得分:2)

这样的事情:

from datetime import date, timedelta, datetime

def extract_date(line):
    """Return a datetime from a log line"""
    fmt = '%Y-%m-%d %H:%M:%S'
    return datetime.strptime(line.split(' ')[:1], fmt) # make your parser

end_date = date.today()
start_date = start_date - timedelta(days=7))

with open('logfile.log') as f:
    lines = (line for line in f if start_date < extract_date(line) < end_date)
    # ...
    print list(lines)

答案 1 :(得分:1)

你的问题响了起来。来自heapq.merge的文档:

  

将多个已排序的输入合并为一个已排序的输出(例如,   合并来自多个日志文件的带时间戳的条目)。返回一个   对已排序的值进行迭代。

正如eyquem所说,你的问题很模糊,但是一旦解析了日志文件(并且可能将它们规范化,因此它们可以一起排序),heapq.merge听起来就像一个好工具。

答案 2 :(得分:0)

让我们从一个日志文件开始。目的是将所有日志条目打印到两个日期之间的标准输出。以下是我到目前为止的情况:

import re

startDate="2013-08-31 06:00:00"
endDate="2013-09-01 05:59:59"

date_re = re.compile(r'(\d+-\d+-\d+ \d+:\d+:\d+)')
with open("logfile.log", "r") as fh:
    for line in fh.readlines():
        match = date_re.search(line)
        if match:
           matchDate = match.group(1)
           if matchDate >= startDate and matchDate <= endDate:
               print match.string.strip()