Python을 배워보자

특정 디렉토리와 그 하위 디렉토리를 순회하면서 특정 문자열이 포함된 파일을 찾아내어 출력

_Blue_Sky_ 2024. 11. 24. 16:16
728x90
728x90

아래는 Python으로 특정 디렉토리와 그 하위 디렉토리를 순회하면서 특정 문자열이 포함된 파일을 찾아내어 출력하는 프로그램 코드입니다. 이 코드는 os 모듈로 디렉토리를 탐색하고, open을 사용하여 파일 내용을 검색합니다.

728x90

Python 코드:

import os

def find_files_with_string(directory, search_string):
    """
    특정 디렉토리 및 하위 디렉토리에서 특정 문자열을 포함하는 파일을 검색.
    
    Args:
        directory (str): 검색할 디렉토리 경로.
        search_string (str): 검색할 문자열.
        
    Returns:
        list: 문자열이 포함된 파일 경로 리스트.
    """
    matching_files = []
    
    # 디렉토리 순회
    for root, _, files in os.walk(directory):
        for file in files:
            file_path = os.path.join(root, file)
            try:
                # 파일 열기 및 검색
                with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
                    for line in f:
                        if search_string in line:
                            matching_files.append(file_path)
                            break  # 한 번 찾으면 추가 검색 불필요
            except Exception as e:
                print(f"파일을 읽는 중 에러 발생: {file_path} - {e}")
    
    return matching_files

# 실행 예제
if __name__ == "__main__":
    search_dir = input("검색할 디렉토리 경로를 입력하세요: ")
    keyword = input("검색할 문자열을 입력하세요: ")

    result = find_files_with_string(search_dir, keyword)

    print("\n검색 결과:")
    if result:
        for file in result:
            print(file)
    else:
        print("검색된 파일이 없습니다.")

코드 설명:

  1. os.walk 사용:
    • 지정한 디렉토리와 그 하위 디렉토리를 재귀적으로 탐색합니다.
    • root는 현재 탐색 중인 디렉토리 경로, files는 해당 디렉토리 내의 파일 리스트입니다.
  2. 파일 내용 검색:
    • open 함수로 파일을 읽고 검색어가 포함된 줄이 발견되면 해당 파일 경로를 저장합니다.
    • encoding='utf-8', errors='ignore'로 인코딩 문제를 최소화합니다.
  3. 에러 처리:
    • 파일 읽기 중 발생할 수 있는 오류(PermissionError, FileNotFoundError 등)를 처리하여 검색이 중단되지 않도록 합니다.
  4. 결과 출력:
    • 문자열을 포함하는 파일 경로를 리스트로 반환하고 출력합니다.

728x90

실행 예시:

  • 디렉토리: /path/to/search
  • 검색어: "TODO"
검색할 디렉토리 경로를 입력하세요: /path/to/search
검색할 문자열을 입력하세요: TODO

검색 결과:
/path/to/search/file1.txt
/path/to/search/subdir/file2.py

추가 옵션 (필요 시)

  1. 특정 파일 확장자만 검색하고 싶다면 if file.endswith('.txt'):와 같은 조건을 추가하세요.
  2. 검색 결과를 파일로 저장하려면 with open('results.txt', 'w')를 사용하여 결과를 기록할 수 있습니다.

추가 요청 사항이 있으면 말씀해주세요! 😊

728x90
728x90