2011-03-14 14 views
0

我有一個日誌文件,看起來像這樣:解析一個日誌文件,以找到最活躍的時候

太陽年03月13 23點45分01秒EDT 2011 - 2 遊戲(S)運行

它每15分鐘更新一次。

我想寫代碼(即將使用Python),它將解析這個並告訴我什麼時候是最活躍的。

我明白這有點含糊,但我想聽聽我可以採取的不同方法。

回答

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分鐘一次,那麼您可能需要進行某種奇特的曲線擬合,以更精細的粒度估算活動。

0

首先,你可以使用正則表達式來分隔日期和數量的每一行:

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

然後你可以使用strptime轉換的第一個參數從正則表達式的返回日期。

然後你有它。你知道接下來要做什麼:)