我有一个如下所示的日志文件:
Sun Mar 13 23:45:01 EDT 2011 - 2 游戏正在运行
每15分钟更新一次。
我想编写代码(打算使用Python)来解析这个并告诉我最活跃的时间。
我知道这有点模糊,但我想听听我可以采取的不同方法。
答案 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] += weight
和game_counts[hour] += weight*n_games
其中weight
更大对于最近的条目)。您可能需要四分之一小时的分辨率。如果您的更新不是每15分钟一次,那么您可能希望进行某种奇特的曲线拟合,以更精细的粒度估计活动。
答案 1 :(得分:0)
首先,您可以使用正则表达式来分隔每行的日期和数字:
r'^(.*?) - (\d*?).*$'
然后,您可以使用strptime将正则表达式返回的第一个参数转换为日期。
然后你拥有它。你知道下一步该做什么:)