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)
코드 동작 원리
-
입력값:
-
absolute_path: 검색을 시작할 절대 경로 (예: /home/user/documents).
-
file_list: 검색 대상 파일명 리스트 (예: ["example1.txt", "example2.txt"]).
-
search_term: 찾고자 하는 검색어 (예: "hello").
-
-
기능:
-
os.walk를 사용해 지정된 경로와 하위 디렉토리를 순회.
-
file_list에 포함된 파일만 처리.
-
파일을 읽기 모드로 열어 검색어를 검색 (대소문자 구분 없이).
-
검색어가 포함된 줄의 위 5줄과 아래 3줄을 문맥으로 저장.
-
파일 읽기 오류는 try-except로 처리.
-
-
출력:
-
검색어가 발견되면 파일 경로와 문맥(위 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
사용 방법
-
absolute_path에 실제 경로를 입력.
-
file_list에 검색할 파일명 리스트를 입력.
-
search_term에 검색어를 입력.
-
코드를 실행하여 결과를 확인.
활용 예시
-
로그 분석: 서버 로그 파일에서 특정 오류 메시지를 찾아 문맥 확인.
-
코드 리뷰: 소스 코드에서 특정 키워드(예: "TODO")를 검색해 주변 코드 확인.
-
문서 검색: 텍스트 문서에서 특정 단어를 찾아 문맥 파악.
주의사항
-
텍스트 파일이 아닌 경우 인코딩 오류가 발생할 수 있으므로 utf-8 외의 인코딩은 별도 처리 필요.
-
파일 경로와 이름은 시스템에 맞게 정확히 입력.
-
검색어는 대소문자 구분 없이 검색되며, 필요 시 코드 수정 가능.
이 스크립트를 사용하면 파일 검색과 문맥 확인 작업을 효율적으로 수행할 수 있습니다.
728x90
'Python을 배워보자' 카테고리의 다른 글
파이썬 Trafilatura: 웹 크롤링과 텍스트 추출의 강력한 도구 (0) | 2025.06.22 |
---|---|
오라클 저장 프로시저 내부 오류 캡처 및 Python oracledb로 애플리케이션 레벨 오류 처리 방법 (0) | 2025.06.15 |
오라클 프로시저 파라미터 정보 조회하는 파이썬 코드 (oracledb 사용) (0) | 2025.05.14 |
Python과 oracledb로 SQL 파일의 Oracle 저장 프로시저 실행하기 (0) | 2025.05.08 |
Python에서 Oracle 저장 프로시저의 DBMS_OUTPUT.PUT_LINE 메시지 확인하기 (0) | 2025.05.05 |