我在每个日志文件的不同位置都有日期和时间的日志文件。我想打印两个日期之间的各种日志文件中的条目到标准输出?例如:我想要前24小时的条目,或者我想要前一周的条目。
在Python中实现这一目标的有效方法是什么?
Kinds Regards,Hendre
答案 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()