
이전 포스팅
주니어 개발자 : 💡 서버 별 로그 .txt 파일 병합, Excel 파일 변환
Log파일 병합 준비 Apache에서 찍어주는 Access Log파일을 모두 다운로드하였다.우선 기간은 2025/01/01 ~ 2025/05/12으로 선택했으며 리눅스 내 tar파일로 압축시켜 다운로드하였다.2대의 서버에서 다운로
yurizzy.tistory.com
서론
이전 포스팅에서 생성한 2개의 서버 병합 파일을 1개의 엑셀 파일로 병합한다.
단 , 병합 시 내가 필요한 데이터만 추출 하여 병합한다.URL의 데이터는 특정 Jsp를 호출한 경우도 있지만, 때론 외부 api등 호출한 기록들이 섞여있다.
추출 조건
URL컬럼 기준으로 탐색한다.URL데이터에 JSP를 호출한 경우만 해당 행을 새로운 엑셀 파일에 더한다.
필요 라이브러리 Import
import pandas as pd
import os
데이터 불러오기 및 .jsp호출 기록 필터링
이제 이전 단계에서 만들어 둔 두 개의 서버 로그 통합 파일을 pandas의 read_excel 함수를 사용하여 불러온다.
파일을 불러온 후 각 데이터에서 URL컬럼 기준, .jsp 호출 기록이 포함된 행만 추출한다.
# 파일 경로 설정 (실제 파일 경로로 수정이 필요.)
file_path_server5 = '여기에 첫 번째 파일 경로를 입력하세요.xlsx'
file_path_server6 = '여기에 두 번째 파일 경로를 입력하세요.xlsx'
# 결과 파일 경로
output_path = '여기에 저장할 파일 이름을 입력하세요.xlsx'
# 첫 번째 서버 로그 통합 파일 (server5) 불러오기
# read_excel로 Excel 파일을 데이터프레임으로 읽어온다.
# header=0는 파일의 첫 번째 행을 컬럼 이름으로 사용하겠다는 의미.
server5 = pd.read_excel(file_path_server5, header=0)
# server5 데이터에서 'URL' 컬럼에 'jsp' 문자열이 포함된 행만 추출.
# .str.contains('jsp', regex=False)를 사용하여 문자열 포함 여부를 확인.
# na=False는 URL 값이 없는(NaN) 경우는 포함하지 않도록 한다.
server5Frame = server5[server5['URL'].str.contains('jsp', regex=False, na=False)]
# 두 번째 서버 로그 통합 파일 (server6) 불러오기
server6 = pd.read_excel(file_path_server6, header=0)
# server6 데이터에서 'URL' 컬럼에 'jsp' 문자열이 포함된 행만 추출.
# 여기서는 server6 데이터를 대상으로 필터링을 수행.
server6Frame = server6[server6['URL'].str.contains('jsp', regex=False, na=False)]
필터링 된 데이터 병합하기
각 파일에서 .jsp호출 기록만 추출한 두 개의 데이터프레임을 하나로 합친다.
# pd.concat() 함수를 사용하여 두 데이터프레임을 위아래로 병합한다.
# 리스트 형태로 병합할 데이터프레임들을 전달한다.
merged_df = pd.concat([server5Frame, server6Frame])
결과를 Excel 파일로 저장
# to_excel() 메서드를 사용하여 데이터프레임을 Excel 파일로 저장.
# index=None: 데이터프레임의 인덱스(행 번호)를 Excel 파일에 저장하지 않도록한다.
# header=True (기본값): 데이터프레임의 컬럼 이름을 Excel 파일의 첫 행에 헤더로 포함시킴.
merged_df.to_excel(output_path, index=None)
print(f"JSP 호출 기록이 포함된 데이터가 {output_path} 파일로 성공적으로 저장되었습니다.")

pd.read_csv/excel의 names와 df.excel/csv의 header차이점
read_csv/excel함수의 names 인자
파일을 읽어올 때 파일의 각 열에 새로운 컬럼 이름을 부여 할 때 사용한다.
주로 원본 파일에 컬럼 헤더가 없거나, 기존 헤더를 무시하고 새 이름을 지정하고 싶을 때 사용한다.
to_excel/csv함수의 header 인자
데이터프레임을 파일로 저장 할 때 데이터 프레임이 이미 가지고 있는 컬럼 이름을 파일의 첫 행에 출력할지 여부를 결정한다.
True로 설정하면 컬럼 이름이 출력되고, False이면 출력하지 않는다.
즉 names는 이름을 정해주는 역할이고,
header는 정해진 이름을 보여줄지 말지를 결정하는 역할이라 이해하면 된다.
참고로 to_excel의 경우 데이터프레임은
이미 pd.concat과정을 거치며 컬럼 이름을 가지고 있기 때문에
이 파일에 쓰고 싶다면 header=True(기본값)로 두면 된다.
❤ 김춘장이의 위키백과 - 나만의 공부 기록 Tistory ❤
gayulz - Overview
개발자가 되고싶은 개발어린이💟. gayulz has 11 repositories available. Follow their code on GitHub.
github.com
'📖 𝐋𝐚𝐧𝐠𝐮𝐚𝐠𝐞 > Pʏᴛʜᴏɴ' 카테고리의 다른 글
| 주니어 개발자 : Python 💡 서버 별 로그 .txt 파일 병합, Excel 파일 변환 (1) | 2025.05.26 |
|---|---|
| 주니어 개발자 : 💡 Python 오프라인 패키지 설치 (0) | 2025.05.17 |
| 주니어 개발자 : 💡 Python 사용하기 / Window & VSCode & 오프라인 패키지 설치 (2) | 2025.05.17 |