解析日志文件以查找最活跃的时间

时间:2011-03-14 15:20:38

标签: python parsing

我有一个如下所示的日志文件:

  

Sun Mar 13 23:45:01 EDT 2011 - 2   游戏正在运行

每15分钟更新一次。

我想编写代码(打算使用Python)来解析这个并告诉我最活跃的时间。

我知道这有点模糊,但我想听听我可以采取的不同方法。

2 个答案:

答案 0 :(得分:2)

对于解析时间,您可能需要time.strptime(http://docs.python.org/library/time.html#time.strptime)。要从日志文件中分解每一行,您可以使用正则表达式,或者只是在" - "上拆分,然后解析临时游戏的数量。

为了找到最活跃的时间,你需要多聪明取决于你想要什么样的答案。例如,您可以根据他们当天的小时数对时间进行分类:

for line in open(logfile, 'r'):
  (timestr, gamestr) = line.split(' - ')
  hour = time.strptime(timestr, time_format).tm_hour
  n_games = parse_game_count(gamestr)
  entry_counts[hour] += 1
  game_counts[hour] += n_games
for hour in range(25): # you can in theory get hour=24!
  busyness_by_hour[hour] = game_counts[hour] / entry_counts[hour]

(警告1:未经测试的代码;警告2:省略了一些细节,例如parse_game_count的定义;警告3:在某些版本的Python上,最后一个分区将执行整数除法,这不是你想要的。)

您可能实际上更关心日志中的最近条目(在这种情况下,例如,您可以更高度地对最近的条目进行加权 - entry_counts[hour] += weightgame_counts[hour] += weight*n_games其中weight更大对于最近的条目)。您可能需要四分之一小时的分辨率。如果您的更新不是每15分钟一次,那么您可能希望进行某种奇特的曲线拟合,以更精细的粒度估计活动。

答案 1 :(得分:0)

首先,您可以使用正则表达式来分隔每行的日期和数字:

r'^(.*?) - (\d*?).*$'

然后,您可以使用strptime将正则表达式返回的第一个参数转换为日期。

然后你拥有它。你知道下一步该做什么:)