2014-06-20 3 views
1

큰 프로젝트 액세스 로그를 처리하고 모든 사용자에 대한 마지막 로그인 시도 목록을 가져올 프로젝트가 있습니다. 로그를 처리하는 동안 다음과 같은 점을 알게되었습니다.파이썬 : 파일에 대한 최신 로그인 만 저장

[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>] 

동일한 사용자가 여러 로그인을 기록합니다. 마지막 목록에 대한 최신 로그인 정보 만 얻으려고합니다.

현재 날짜와 마지막 시간을 비교하는 것이 쉽지만 내 질문은 : 어떻게 현재의 최신 로그인을 임시 저장하고 다음과 비교할 수 있습니까? 나는 final_list []에 각각 로그인을 추가하고있어 경우

단순화 된 코드는 사용자가 이미 있는지 확인하고, 현재 로그인을 비교하는 방법이 그래서이

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]]) 

처럼 보인다 하나는 목록에 있습니까?

+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 : 'set'객체가 항목 할당을 지원하지 않습니다." – sergei

+0

위의 @gkusner를 보면 Set 대신 사용자 사전 (final_list = {})을 사용할 수 있다고 생각합니다. 왜 네가 세트가 필요하다고 생각하는지 모르겠다. 여기로와. –

+0

나의 늦은 대답에 대해 유감스럽게 생각하지만, 그 방법을 다시 생각한 후에 사전이 정확히 내가 필요한 것을 깨닫는다. – sergei

관련 문제