문제 : 로그 파일 집계
설명 :
웹 서버에서 나온 큰 로그 파일이 있습니다.
로그 파일의 각 줄에는 타임스탬프, 클라이언트의 IP 주소 및 응답 시간이 밀리초 단위로 포함되어 있습니다.
로그 파일을 읽고 IP 주소별로 데이터를 집계한 후 각 IP 주소에 대한 평균 응답 시간을 반환하는
Python 함수를 작성하세요.
입력 형식
로그 파일(logfile.txt)은 다음과 같은 형식을 가집니다:
# makefile
2023-07-07T14:48:00Z 192.168.1.1 200
2023-07-07T14:48:02Z 192.168.1.2 305
2023-07-07T14:48:05Z 192.168.1.1 180
2023-07-07T14:48:10Z 192.168.1.3 210
2023-07-07T14:48:15Z 192.168.1.2 290
출력 형식
함수는 IP 주소를 키로 하고 평균 응답 시간을 값으로 가지는 사전을 반환해야 합니다.
{
"192.168.1.1": 190.0,
"192.168.1.2": 297.5,
"192.168.1.3": 210.0
}
제약 사항
로그 파일은 매우 클 수 있으므로 효율성이 중요합니다.
로그 파일은 잘 형성되어 있으며 오류가 없다고 가정합니다.
코드
from collections import defaultdict
def aggregate_log_data(logfile: str) -> dict:
ip_data = defaultdict(list)
# 파일 읽기
with open(logfile, 'r') as file:
for line in file:
parts = line.strip().split()
timestamp, ip, response_time = parts[0], parts[1], int(parts[2])
ip_data[ip].append(response_time)
# 평균 구하기
ip_avg_response_time = {ip: sum(times)/len(times) for ip, times in ip_data.items()}
return ip_avg_response_time
if __name__ == "__main__":
logfile = 'logfile.txt' # 로그 파일 경로를 입력
print(aggregate_log_data(logfile))
풀이
dictionary를 통해 중복되는 key 값의 value의 평균값을 구하는 문제입니다.
defaultdict를 사용하면 키가 존재하지 않을 때 기본 값을 자동으로 생성할 수 있습니다.
반복문이 끝나고 ip_data에는
{'192.168.1.1': [200, 180], '192.168.1.2': [305, 290], '192.168.1.3': [210]}
와 같은 데이터들이 적재됩니다.
'Programming > CodingTest' 카테고리의 다른 글
[Data] CSV 파일의 데이터 병합 문제 (0) | 2024.08.14 |
---|---|
[Data] 로그 파일에서 에러 분석 문제 (0) | 2024.08.11 |
[이코테] [5] 다이나믹 프로그래밍 ( 동적계획법 ) (0) | 2024.08.10 |
[이코테] [4] 정렬-Sort (0) | 2024.08.10 |
[이코테] [3] DFS 와 BFS (0) | 2024.08.07 |