파이썬 실습/검색프로그램 만들기

파이썬 파일내용 검색 프로그램 만들기

파기차차 2022. 8. 20. 15:53
728x90
반응형
SMALL
728x90
ㅁ 개요
 
O 프로그램 소개
 
 - 사용자가 검색할 폴더와 키워드를 입력하면 해당 폴더내 파일내용에서 키워드가 포함된 모든 파일을 찾아주는 프로그램 입니다.

(본 블로그의 내용은 유튜브 동영상(파이썬 파일내용 검색 프로그램 만들기)에서 더욱 자세히 보실 수 있습니다.)

 

 

O 완성된 프로그램 실행 화면
 
 - 아래에서는  'C:\Temp2' 폴더내의 모든 파일을 검색 후 키워드 '이력서'가 포함된 파일을 보여줍니다.
 - C:\Temp2\b.txt와 C:\Temp2\old\search_keyword.txt에 '이력서'라는 단어가 포함된것을 볼 수 있습니다.
 

 
 

 
ㅁ 세부 내용
 
O 완성된 소스

 

import os

print("""
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@             프로그램 소개       @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@ 본 프로그램은 특정 폴더내 파일들 속에 포함된 단어를 찾아주는 프로그램입니다.         @@@@@@
@@@@@@ 사용법은 아래와 같습니다. (예시)                                                  @@@@@@
@@@@@@                                                                                  @@@@@@
@@@@@@ 검색할 디렉토리명(전체경로)을 입력해 주세요: C:\Download                           @@@@@@
@@@@@@ 파일내 찾고자하는 키워드를 입력해 주세요.: 개인정보                                 @@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
""")

user_input = input("검색할 디렉토리명(전체경로)을 입력해 주세요.: ")    # input()함수를 사용하여 사요앚의 입력 디렉토리를 받아 user_input에 저장
searchstring = input("파일내 찾고자하는 키워드를 입력해 주세요.: ")     # input()함수를 사용하여 사요앚의 입력 디렉토리를 받아 user_input에 저장

for (path, dir, files) in os.walk(user_input):                          # 특정 경로에 존재하는 모든 하위 디렉토리를 탐색하며 원하는 파일을 찾고자 할때 os.walk 사용
    # print(path, dir, files)                                             # 여기서는 입력한 디렉토리인 C:\Temp2 아래의 하위 디렉토리까지 돌면서 파일을 찾을 수 있음

    for filename in files:                                              # 파일들을 목록에서 하나씩 꺼내서
        # print(filename)
        with open(path+os.sep+filename, 'r', encoding='UTF8') as f:   # 파일(C:\temp2\a.txt)을 읽기모드('r')로 한글이 열리도록(encoding='UTF8') 열고,
            try:                                                        # 에러 발생시 예외를 처리하기 이해 try~except 구문 사용
                if searchstring in f.read():                            # 파일 내용 중 키워드(예: '이력서')가 존재하면 if문 실행
                    print("===========================================================")
                    print(path+os.sep+filename, " \t파일에 '", searchstring, "' 단어가 포함되어 있습니다.")
                else:
                    pass                                                # 파일 내용 중 키워드("예: 이력서")가 존재하지 않으면 아무것도 하지 않고 다음 단계로 넘어감
                f.close()
            except:                                                     # except에 pass로 지정해 주면 에러가 발생하더라도 중지되지 않고, skip하여 다음 단계로 넘어간다.
                pass
 

 

 
O 핵심 내용
 
1.os.listdir() : 디렉토리 내 모든 파일을 리스트 해주는 함수
 
2.os.sep : OS의 폴더 경로 구분자(윈도우는 \, / 둘다 상관없음)
 
3.os.path.isfile() : 경로에 파일이 존재하면 참(True)
 
4.with open(file, 'r') as f:         : 파일(file)을 읽기('r') 모드로 열때 사용
 
5.encoding='UTF8' : 한글이 깨질때 사용
 
6.os.walk() : os.listdir()과 비슷하나, 하위디렉토리까지 돌면서 모든 파일을 리스트해주는 함수, os.listdir()함수는 자신의 첫번째 디렉토리의 모든 파일만 리스트함
 

 
 
O 기본 내용
 
1.input()함수로 사용자로 부터 검색할 경로와 찾을 키워드를 입력 받습니다.

 

 

 

2.os.listdir()함수를 사용하여 사용자가 입력한 디렉토리내 모든 파일을 files변수에 담고,

files에 담겨진 파일들을 하나씩 확인하면서(with open(file, 'r', encoding='UTF8' 로 파일을 읽고)

키워드가 포함되어 있으면 해당 파일의 전체경로를 보여줍니다.

 

 

 

3.위에서는 하위 디렉토리인 old 안에 있는 search_keyword.txt 파일을 찾지 않았는데, 이를 개선하기 위해서 os.walk()함수를 사용하여 하위 디렉토리까지 검색하도록 해줍니다.

for (path, dir, files) in os.walk(user_input): <-------- 이부분이 어려울 수 있는데, 익숙하지 않기 때문이며, 자주 쓰는 패터이므로 이런게 있구나 정도로 기억하시면 좋습니다.(외울 필요 없고요, 나중에 찾을 수 있으면 됩니다.)

 

 
 

 
ㅁ 정리
 
O 우리가 배운 내용
 
 - 파일내용 검색 프로그램을 만들어 보면서 다양한 함수의 사용법을 익혔습니다.
 - 이로써 우리는 나중에 더 큰 프로그램 작성시 이를 기반으로 활용할 수 있는 토대로 닦았습니다.
- os.walk() 등 위의 핵심 내용은 외울 필요는 없지만, 나중에 필요시 다시 찾아 볼때 "아 이런 내용이었지!!' 정도는 기억할 수 있도록 해주면 좋습니다.
 
 
O 숙제
 
 - 위 소스를 기반으로 윈도우에서 파일내용을 검색하는 프로그램을 만들어 보면 실력을 키우는데 많은 도움이 될 것으로 확신합니다.

 

 

 

 

 

 

 

728x90
반응형
LIST