Python을 배워보자

파일 검색 및 문맥 리포트 생성하기

_Blue_Sky_ 2025. 6. 7. 20:55
728x90
파일 시스템에서 특정 검색어를 포함한 파일을 찾아 그 문맥을 확인하고 싶을 때가 있습니다. 이 글에서는 파이썬을 사용해 절대 경로와 파일명 리스트를 입력받아 검색어를 찾고, 해당 줄의 위 5줄과 아래 3줄을 함께 리포트하는 스크립트를 소개합니다. 이 코드는 효율적이고 간단하며, 다양한 상황에서 활용 가능합니다.
 
 
코드 설명
아래는 검색어를 찾아 문맥과 함께 리포트하는 파이썬 코드입니다.
import os

def search_files(absolute_path, file_list, search_term):
    """
    절대 경로 이하에서 파일명 리스트에 해당하는 파일들을 읽어 검색어를 찾고,
    검색어가 포함된 줄의 위 5줄과 아래 3줄을 함께 리포트합니다.
    
    Parameters:
    absolute_path (str): 검색 시작 절대 경로
    file_list (list): 검색할 파일명 리스트
    search_term (str): 찾고자 하는 검색어
    """
    found = False
    report = []

    # 절대 경로 이하를 순회
    for root, dirs, files in os.walk(absolute_path):
        for file_name in files:
            if file_name in file_list:
                file_path = os.path.join(root, file_name)
                try:
                    with open(file_path, 'r', encoding='utf-8') as file:
                        lines = file.readlines()
                        for line_num, line in enumerate(lines, 1):
                            if search_term.lower() in line.lower():
                                found = True
                                start_idx = max(0, line_num - 6)
                                end_idx = min(len(lines), line_num + 2)
                                context_lines = []
                                for i in range(start_idx, end_idx):
                                    line_content = lines[i].strip()
                                    line_indicator = "==>" if i + 1 == line_num else "   "
                                    context_lines.append(f"{line_indicator} {i+1}: {line_content}")
                                report.append({
                                    'file_path': file_path,
                                    'context': context_lines
                                })
                except (IOError, UnicodeDecodeError) as e:
                    print(f"파일 읽기 오류: {file_path}, 오류: {e}")
    
    # 리포트 출력
    if found:
        print(f"\n검색어 '{search_term}'에 대한 리포트:")
        for entry in report:
            print(f"\n파일: {entry['file_path']}")
            print("내용 (==>: 검색어 포함 줄):")
            for context_line in entry['context']:
                print(context_line)
    else:
        print(f"\n검색어 '{search_term}'을(를) 찾을 수 없습니다.")

# 사용 예시
if __name__ == "__main__":
    absolute_path = "/path/to/your/directory"
    file_list = ["example1.txt", "example2.txt"]
    search_term = "hello"
    search_files(absolute_path, file_list, search_term)
코드 동작 원리
  1. 입력값:
    • absolute_path: 검색을 시작할 절대 경로 (예: /home/user/documents).
    • file_list: 검색 대상 파일명 리스트 (예: ["example1.txt", "example2.txt"]).
    • search_term: 찾고자 하는 검색어 (예: "hello").
  2. 기능:
    • os.walk를 사용해 지정된 경로와 하위 디렉토리를 순회.
    • file_list에 포함된 파일만 처리.
    • 파일을 읽기 모드로 열어 검색어를 검색 (대소문자 구분 없이).
    • 검색어가 포함된 줄의 위 5줄과 아래 3줄을 문맥으로 저장.
    • 파일 읽기 오류는 try-except로 처리.
  3. 출력:
    • 검색어가 발견되면 파일 경로와 문맥(위 5줄, 검색어 포함 줄, 아래 3줄)을 출력.
    • 검색어 포함 줄은 ==>로 표시.
    • 검색어가 없으면 "찾을 수 없다"는 메시지 출력.
 
 
출력 예시
test1.txt 파일 내용:
 
1: This is line 1
2: This is line 2
3: This is line 3
4: This is line 4
5: This is line 5
6: This is line 6
7: I love coding in Python!
8: This is line 8
9: This is line 9
10: This is line 10
검색어 "python"에 대한 출력:
 
검색어 'python'에 대한 리포트:

파일: /home/user/documents/test1.txt
내용 (==>: 검색어 포함 줄):
   2: This is line 2
   3: This is line 3
   4: This is line 4
   5: This is line 5
   6: This is line 6
==> 7: I love coding in Python!
   8: This is line 8
   9: This is line 9
사용 방법
  1. absolute_path에 실제 경로를 입력.
  2. file_list에 검색할 파일명 리스트를 입력.
  3. search_term에 검색어를 입력.
  4. 코드를 실행하여 결과를 확인.
활용 예시
  • 로그 분석: 서버 로그 파일에서 특정 오류 메시지를 찾아 문맥 확인.
  • 코드 리뷰: 소스 코드에서 특정 키워드(예: "TODO")를 검색해 주변 코드 확인.
  • 문서 검색: 텍스트 문서에서 특정 단어를 찾아 문맥 파악.
주의사항
  • 텍스트 파일이 아닌 경우 인코딩 오류가 발생할 수 있으므로 utf-8 외의 인코딩은 별도 처리 필요.
  • 파일 경로와 이름은 시스템에 맞게 정확히 입력.
  • 검색어는 대소문자 구분 없이 검색되며, 필요 시 코드 수정 가능.
 이 스크립트를 사용하면 파일 검색과 문맥 확인 작업을 효율적으로 수행할 수 있습니다.  
728x90