我有一個日誌文件,看起來像這樣:解析一個日誌文件,以找到最活躍的時候
太陽年03月13 23點45分01秒EDT 2011 - 2 遊戲(S)運行
它每15分鐘更新一次。
我想寫代碼(即將使用Python),它將解析這個並告訴我什麼時候是最活躍的。
我明白這有點含糊,但我想聽聽我可以採取的不同方法。
我有一個日誌文件,看起來像這樣:解析一個日誌文件,以找到最活躍的時候
太陽年03月13 23點45分01秒EDT 2011 - 2 遊戲(S)運行
它每15分鐘更新一次。
我想寫代碼(即將使用Python),它將解析這個並告訴我什麼時候是最活躍的。
我明白這有點含糊,但我想聽聽我可以採取的不同方法。
對於解析時間,你可能想要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分鐘一次,那麼您可能需要進行某種奇特的曲線擬合,以更精細的粒度估算活動。
首先,你可以使用正則表達式來分隔日期和數量的每一行:
r'^(.*?) - (\d*?).*$'
然後你可以使用strptime轉換的第一個參數從正則表達式的返回日期。
然後你有它。你知道接下來要做什麼:)