2014-06-20 41 views
1

我有這個項目,我需要處理大型訪問日誌,並獲得所有用戶最後一次登錄嘗試的列表。在處理日誌我得有像這樣的觀點:Python:只保存最新的登錄文件

[user1, <last login recorded>, <current login>] 
[user2, <no last login recorded>, <current login>] 
[user1, <last login recorded>, <current login>] 
[user3, <last login recorded>, <current login>] 

正如你看到的,同樣的用戶記錄數登錄。我只想獲得最終名單的最新登錄名。

我使用datetime對象進行登錄,因此將當前對象與最後一個比較很容易,但我的問題是:如何暫時保存當前最新的登錄名並將其與下一個進行比較?

簡化代碼看起來像這樣

final_list = [] 
for login in log_file: 
    login = login.split(';') 
    last_login = get_last_login() #ldap search for the user last login 
    if last_login: 
     final_list.append([login[0], last_login, login[1]]) 
    else: 
     final_list.append([login[0], 'no_last_login_recorded', login[1]]) 

所以,如果我追加每個登錄到final_list []有沒有辦法來檢查,如果用戶已經在那裏,當前登錄比作一個在列表中?

+0

有點偏離主題,但是在大多數Linux發行版中命名爲'lastlog'的命令會打印所有用戶的最後登錄時間。 –

+0

@FlorinStingaciu很高興知道,但我正在使用ldap訪問文件。不管怎麼說,還是要謝謝你。 – sergei

+1

只需使用用戶鍵入的字典 - 最後寫入贏得 – gkusner

回答

1

由於@gkunser指出,你可以簡單地我們的字典({})鍵入用戶是這樣的:

final_list = {} 
for login in log_file: 
    login = login.split(';') 
    last_login = get_last_login(); 
    if last_login: 
     final_list[login[0]] = (last_login, login[1]]) 
    ... 

這樣,你將自動覆蓋用戶登錄信息

[這個僞代碼用於建議一個不正確的集合]

+0

我試圖複製這個,但我得到「TypeError:」設置「對象不支持項目分配」 – sergei

+0

看到@gkusner上面我認爲你可以使用字典(final_list = {}),而不是設置。我不知道爲什麼我認爲你需要一套。在這裏設置。 –

+0

對不起,我遲到的回覆,但重新思考後,我意識到字典正是我需要的。 – sergei