서론
텍스트 파일 내에서 특정 조건에 맞는 내용을 검색하고 필터링하는 기능은 시스템 관리, 데이터 분석, 로그 분석 등 다양한 분야에서 필요한 경우가 많습니다. 예를 들어, 시스템 로그에서 오류 메시지를 찾거나 특정 사용자의 활동을 추적하는 데 유용합니다. 파이썬의 강력한 정규 표현식 지원 기능을 활용하면 이러한 작업을 효율적으로 수행할 수 있습니다. 이 글에서는 파이썬을 이용해 텍스트 파일 내에서 정규 표현식을 활용한 검색 및 필터링 방법을 구체적으로 설명합니다. 이를 통해 사용자는 다양한 상황에서 필요한 데이터를 빠르게 추출하고 분석할 수 있게 됩니다.
핵심 개념
정규 표현식 기초
정규 표현식은 특정 패턴을 검색하는 데 사용되는 실제로 써먹기 좋은 방법입니다. 몇 가지 기본 메타 문자를 살펴보겠습니다:
- . : 임의의 문자를 나타냅니다.
- * : 선행 또는 후행 0개 이상 반복을 나타냅니다.
- + : 선행 또는 후행 1개 이상 반복을 나타냅니다.
- ? : 선행 0개 또는 1개 반복을 나타냅니다.
- [] : 특정 문자 집합 내의 문자를 나타냅니다.
- \d : 숫자 (0-9)를 나타냅니다.
- \w : 알파벳과 숫자 (문자 및 밑줄)를 나타냅니다.
- \s : 공백 문자를 나타냅니다.
파이썬의 re 모듈 사용법
파이썬에서 정규 표현식을 사용하기 위해 re 모듈을 활용합니다. 주요 함수들은 다음과 같습니다:
- re.search(pattern, string): 문자열 내에서 패턴의 첫 번째 매치를 찾습니다.
- re.findall(pattern, string): 문자열 내에서 모든 매치를 리스트로 반환합니다.
- re.compile(pattern): 정규 표현식 패턴을 컴파일하여 효율적으로 재사용할 수 있습니다.
사용 전 주의할 점
이 글의 예제는 본인이 관리하는 사이트, 테스트 서버, 사내 시스템처럼 자동화 사용이 허용된 환경을 기준으로 설명합니다.
실제 서비스에 적용할 때는 해당 사이트의 이용 약관을 먼저 확인해야 합니다. 캡차, 2단계 인증, 보안 확인 절차를 우회하는 용도로 사용하면 안 됩니다.
아이디와 비밀번호는 코드에 직접 적기보다 환경 변수나 별도 설정 파일로 관리하는 편이 안전합니다.
코드 구현
예제 텍스트 파일 생성 및 준비
텍스트 파일을 생성하거나 사용합니다. 실제 작업에서는 해당 파일의 경로를 적절히 설정해야 합니다. 예제 파일은 다음과 같은 내용을 포함합니다:
[SYSTEM LOG] 2023-10-27 10:00:01 [User: admin] Login Success
[SYSTEM LOG] 2023-10-27 10:05:23 [User: john_doe@여기에_URL_입력] Action: Upload
[SYSTEM LOG] 2023-10-27 10:10:45 [User: jane.doe] Action: Download
[SYSTEM LOG] 2023-10-27 10:15:12 [User: support@company.com] Status: ERROR
[SYSTEM LOG] 2023-10-27 10:20:00 [User: test@user] Phone: +82-10-1234-5678
[SYSTEM LOG] 2023-10-27 10:25:00 [User: admin] Login Failed
import re
import os
# 파일 경로 변수 설정
TARGET_FILE_PATH = "target.txt" # 실제 파일 경로로 변경 필요
# 검색할 패턴 정의
PATTERNS = {
"email_pattern": r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}",
"error_keyword": r"ERROR",
"phone_pattern": r"\+?[0-9]{2,3}\s?-?\s?[0-9]{3,4}\s?-?\s?[0-9]{4}",
}
def create_sample_file():
"""
예제를 위해 sample 텍스트 파일을 생성하는 함수
실제 작업을 위해서는 이 함수 대신 실제 파일을 사용하는 경로를 설정
"""
sample_content = """
[SYSTEM LOG] 2023-10-27 10:00:01 [User: admin] Login Success
[SYSTEM LOG] 2023-10-27 10:05:23 [User: john_doe@여기에_URL_입력] Action: Upload
[SYSTEM LOG] 2023-10-27 10:10:45 [User: jane.doe] Action: Download
[SYSTEM LOG] 2023-10-27 10:15:12 [User: support@company.com] Status: ERROR
[SYSTEM LOG] 2023-10-27 10:20:00 [User: test@user] Phone: +82-10-1234-5678
[SYSTEM LOG] 2023-10-27 10:25:00 [User: admin] Login Failed
"""
if not os.path.exists(TARGET_FILE_PATH):
with open(TARGET_FILE_PATH, 'w', encoding='utf-8') as f:
f.write(sample_content)
print(f"예제 파일 [{TARGET_FILE_PATH}] 이(가) 생성되었습니다.")
create_sample_file()
정규 표현식을 활용한 검색 코드 예제
정규 표현식을 사용하여 파일 내에서 특정 패턴을 검색합니다.
def filter_text_file(file_path, regex_pattern):
"""
지정된 정규 표현식으로 텍스트 파일 필터링
매칭된 라인만 추출
"""
matched_lines = []
try:
with open(file_path, 'r', encoding='utf-8') as f:
for line in f:
if re.search(regex_pattern, line):
matched_lines.append(line.strip())
except FileNotFoundError:
print(f"오류: 파일 [{file_path}] 을(를) 찾을 수 없습니다.")
return matched_lines
except PermissionError:
print(f"오류: 파일 [{file_path}] 에 접근 권한이 없습니다.")
return matched_lines
except re.error as e:
print(f"오류: 정규 표현식 패턴 오류 - {e}")
return matched_lines
return matched_lines
검색 결과 필터링 및 출력 코드 예제
필터링된 결과를 콘솔에 출력합니다.
def run_analysis():
"""
메인 분석 루틴
"""
print("\n--- 필터링 결과 출력 ---")
# 각 패턴별로 검색 결과 출력
for pattern_name, pattern in PATTERNS.items():
print(f"\n1. 패턴명: {pattern_name}")
print(f" 검색 내용: {pattern}")
results = filter_text_file(TARGET_FILE_PATH, pattern)
if results:
print(f" 일치한 라인 ({len(results)}개):")
for line in results:
print(f" > {line}")
else:
print(" 일치한 라인 없음")
if __name__ == "__main__":
try:
run_analysis()
except Exception as general_error:
print(f"예상치 못한 오류 발생: {general_error}")
실행 방법
- 코드 저장: 해당 코드를
search_text.py파일로 저장합니다. - 파이썬 설치 확인: 파이썬이 설치되어 있는지 확인합니다.
- 코드 실행: 터미널 또는 명령 프롬프트에서 아래 명령어를 실행합니다.
python search_text.py - 예제 파일 확인: 스크립트가 실행되면 예제 파일이 생성되거나 기존
target.txt파일을 분석합니다. 결과는 콘솔에 출력됩니다.
예상 실행 결과
예제 파일 [target.txt] 이(가) 생성되었습니다.
--- 필터링 결과 출력 ---
1. 패턴명: email_pattern
검색 내용: [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
일치한 라인 (2개):
> [SYSTEM LOG] 2023-10-27 10:05:23 [User: john_doe@여기에_URL_입력] Action: Upload
> [SYSTEM LOG] 2023-10-27 10:15:12 [User: support@company.com] Status: ERROR
1. 패턴명: error_keyword
검색 내용: ERROR
일치한 라인 (1개):
> [SYSTEM LOG] 2023-10-27 10:15:12 [User: support@company.com] Status: ERROR
1. 패턴명: phone_pattern
검색 내용: \+?[0-9]{2,3}\s?-?\s?[0-9]{3,4}\s?-?\s?[0-9]{4}
일치한 라인 (1개):
> [SYSTEM LOG] 2023-10-27 10:20:00 [User: test@user] Phone: +82-10-1234-5678
코드 설명
create_sample_file(): 예제 텍스트 파일을 생성하는 함수입니다. 실제 작업에서는 이 부분을 실제 파일 경로로 대체해야 합니다.filter_text_file(file_path, regex_pattern): 지정된 정규 표현식 패턴으로 텍스트 파일을 필터링합니다. 매칭된 라인만 리스트에 저장하여 반환합니다.run_analysis(): 메인 루틴으로, 각 패턴에 대해 파일을 검색하고 필터링된 결과를 콘솔에 출력합니다.
사용자가 반드시 수정해야 하는 부분
TARGET_FILE_PATH: 분석할 실제 텍스트 파일의 경로를 설정해야 합니다. 예를 들어,"path/to/your/target.txt"로 변경하세요.PATTERNS: 필요한 검색 패턴을 추가하거나 수정할 수 있습니다. 예를 들어, 새로운 이메일 패턴을 추가하거나 특정 키워드를 검색하도록 수정할 수 있습니다.
실행 전 확인 사항
- 파이썬 설치: 파이썬이 시스템에 설치되어 있는지 확인하세요 (
python --version명령어 실행). - 파일 접근 권한: 코드가 실행되는 디렉토리에서 파일을 읽고 쓸 수 있는 권한이 있는지 확인하세요.
- 파일 존재 여부: 예제 파일이 생성되거나, 실제 분석할 파일이 존재하는지 확인하세요.
자주 발생하는 오류와 해결 방법
- 파일 경로 오류
- 원인:
TARGET_FILE_PATH경로가 올바르지 않거나 파일이 존재하지 않을 때 발생합니다. -
TARGET_FILE_PATH = os.path.abspath("path/to/your/target.txt") - 정규 표현식 오류 (
re.error) - 원인: 패턴 문자열에 닫는 괄호
]또는 중괄호}가 누락되어 있을 때 발생합니다. -
escaped_pattern = re.escape(your_pattern) - 인코딩 문제
- 원인: 파일 인코딩이 환경 설정과 맞지 않을 때 발생합니다.
- 해결 방법:
open()함수의encoding매개변수를 적절히 설정하세요 (예:utf-8또는cp949).
with open(file_path, 'r', encoding='utf-8') as f:
마무리
이 글을 통해 텍스트 파일 내에서 특정 조건에 맞는 내용을 검색하고 필터링하는 방법을 배웠습니다. 정규 표현식을 활용하면 텍스트 처리가 훨씬 효율적이고 정확해집니다. 추가 학습을 위해 정규 표현식 가이드나 파이썬 re 모듈 공식 문서를 참조해보세요. 다음 단계로는 다양한 정규 표현식 패턴을 추가하거나 다른 파일 형식 (예: CSV, 엑셀)에 대한 텍스트 검색 기능을 확장해볼 수 있습니다. 이러한 기술은 데이터 분석, 시스템 관리 등 다양한 업무에서 매우 유용하게 활용될 수 있습니다.
실제로 테스트할 때 먼저 확인한 부분
파이썬 자동화 코드는 코드 내용만큼 실행 위치와 파일 경로가 중요합니다.
제가 테스트할 때도 코드가 틀린 줄 알았는데, 실제로는 터미널을 다른 폴더에서 실행해서 파일을 찾지 못한 경우가 많았습니다.
따라서 예제를 실행하기 전에 현재 터미널 위치, 파일명, 필요한 라이브러리 설치 여부를 먼저 확인하는 것이 좋습니다.
테스트 환경
이 글은 아래와 같은 환경을 기준으로 설명합니다.
- Windows 11
- Python 3.11
- VS Code 또는 기본 터미널
- 필요한 라이브러리 설치 완료 상태
Mac이나 Linux에서도 비슷하게 실행할 수 있지만, 경로 표기와 터미널 명령어는 환경에 맞게 조금 바꿔야 합니다.
제가 테스트하면서 자주 막혔던 부분
파이썬 예제에서 자주 막히는 부분은 라이브러리 설치 위치와 실행 위치였습니다.
분명히 pip install을 했는데도 모듈을 찾지 못한다면, 현재 실행 중인 Python과 pip가 같은 환경을 보고 있는지 확인해야 합니다.
또 파일을 다루는 예제라면 터미널을 어느 폴더에서 실행했는지에 따라 파일을 찾지 못하는 문제가 자주 생깁니다.
'파이썬 강의' 카테고리의 다른 글
| Python으로 실무에 바로 적용 가능한 자동 데이터 수집 및 분석 파이프라인 구축하기 (0) | 2026.05.04 |
|---|







