서론
주니어 개발자 : 💡 Python 사용하기 / Window & VSCode & 오프라인 패키지 설치
안녕하세요 오랜만에 글을 쓰네요!앞으로는 자주자주 쓰도록 반성하겠습니다🙇🏻♀️이제 개발자로 취업한 지 1년이 딱 지났는데요!왜 Python을 사용했고 어떤 환경에서 사용했는지 대해 설
yurizzy.tistory.com
이전 포스팅에서 데이터 분석에 앞서 Python과 Pandas 환경을 설정하는 방법을 알아보았습니다.
이제 실제 데이터를 다루는 단계로 나가보려 합니다.
오늘은 Apache 서버에서 수집된 로그파일들(.txt)을 하나로 모으고
분석하기 용이한 엑셀형식으로 변환하는 방법에 대해 포스팅하겠습니다.
데이터 통합의 첫 걸음을 함께 시작해 보시죠!🙇🏻♀️
Log파일 병합 준비
Apache에서 찍어주는 Access Log파일을 모두 다운로드하였다.
우선 기간은 2025/01/01 ~ 2025/05/12으로 선택했으며 리눅스 내 tar파일로 압축시켜 다운로드하였다.
2대의 서버에서 다운로드하였으며 서버별 로그 파일명이 같기 때문에 2개의 폴더를 생성하여 각각 넣었다.
서버별 날짜 파일을 모두 한 파일로 병합한다.
무작정 2개의 서버 파일을 모두 병합 시 오래 걸리기 때문에
서버별로 나눠서 엑셀파일을 만들었다
소스 설명
필요 라이브러리 Import
import pandas as pd
import os
데이터 처리를 위한 pandas와 파일 및 디렉터리 조작을 위한 os 라이브러리를 불러온다.
로그파일 경로 선언 및 목록 확인
path = '경로' # 실제 로그 파일들이 있는 디렉터리 경로로 수정필요.
file_list = os.listdir(path)
path 변수에 로그 파일들이 저장된 디렉터리의 경로를 지정한다.
os.listdir(path)
함수는 해당 경로안에 있는 모든 파일과 하위 디렉터리의 이름을 리스트 형태로 가져온다.
병합할 log파일 목록 필터링
file_list_log = [file for file in file_list if file.endswith(".log")]
file_list에 있는 항목들 중에 이름이. log로 끝나는 파일만 골라 새로운 리스트 file_list_log라는 새로운 리스트를 생성한다.
이 리스트에는 실제 병합할 로그 파일들의 이름이 담기게 된다.
빈 데이터 객체 생성
merged_df = pd.DataFrame([])
pandas의 DataFrame()
함수를 사용하여 빈 데이터프레임을 생성하고
merged_df 변수에 저장한다.
이 데이터프레임은 각 로그 파일에서 읽어온 데이터를 하나씩 합쳐나가기 위한 초기 용기로 사용된다.
반복문을 통해 로그 파일을 읽고 데이터 병합
for file in file_list_log :
# os.path.join 사용 권장
file_path = os.path.join(path, file)
df = pd.read_csv(file_path,
names=['IP', 'A', 'B', 'TIME', 'PLUS', 'URL', 'CODE', 'C', 'HOST', 'AGENT'],
encoding='UTF-8',
sep=' ') # 또는 delimiter=' '
# ignore_index=True 추가 권장
merged_df = pd.concat([merged_df, df], ignore_index=True)
file_list_log 리스트에 있는 각 로그 파일에 대해 반복 작업을 수행한다.
file_path = os.path.join(path, file)
디렉터리 경로와 파일 이름을 결합하여 파일의 전체 경로를 만든다.
os.path.join을 사용하면 운영체제에 맞는 경로 구분자를 자동으로 사용해 준다.
pd.read_csv(...)
지정된 file_path의 로그 파일을 읽어 데이터프레임으로 만든다.
names=[..]
로그 파일에는 보통 컬럼 헤더가 없기 때문에 각 열에 의미있는 이름을 지정
encoding='UTF-8'
파일 인코딩 방식 지정
sep=' '
데이터가 공백을 기준으로 구분되어 있다는 것을 나타냄, sep이 안될 경우 delimiter를 시도
결과를 Excel파일로 저장
# 실제 저장할 파일 경로와 이름으로 수정하세요
merged_df.to_excel('경로\\파일명.xlsx', index=None)
최종적으로 모든 로그 파일의 데이터가 병합된 merged_df 데이터프레임을 지정된 경로에 Excel파일로 저장합니다.
index=None
Excel 파일에 데이터프레임의 행 인덱스를 포함시키지 않도록 설정
header=True
기본값, 데이터 프레임의 컬럼 이름은 Excel파일의 첫 행에 자동으로 저장한다.
결과
이렇게 서버별 로그파일을 단순 병합 시켰다.
단순 병합이다 보니 크기도 크고 파일을 실행시키는 것 또한 오래 걸린다.
이제 두 개의 서버 파일의 내용을 병합하면서 내가 필요한 정보만 추출해야 한다.
❤ 김춘장이의 위키백과 - 나만의 공부 기록 Tistory ❤
gayulz - Overview
개발자가 되고싶은 개발어린이💟. gayulz has 11 repositories available. Follow their code on GitHub.
github.com
'👩🏻💻 𝐋𝐚𝐧𝐠𝐮𝐚𝐠𝐞 > ⠀⠀⠀⠀ Pʏᴛʜᴏɴ' 카테고리의 다른 글
주니어 개발자 : 💡 Excel 파일에서 필요한 데이터 추출, 병합하기 (0) | 2025.05.26 |
---|---|
주니어 개발자 : 💡 Python 오프라인 패키지 설치 (0) | 2025.05.17 |
주니어 개발자 : 💡 Python 사용하기 / Window & VSCode & 오프라인 패키지 설치 (2) | 2025.05.17 |