23년 10월 11일 수요일

 

전공동아리에서 교수님이 개인 프로젝트를 던져 주셨다.

 

중요한건 본인이 얼마나 찾는지, 활용하는지의 여부 이고

 

프레임워크나 함수 라이브러리의 사용 제한이 없다.

 

파이썬 프로젝트

- 개발언어 : 파이썬(함수 적극적 이용 가능)
- 내용(범위) : 파일 및 폴더 내용 찾기
 ->자료 저장 시  해시태그 또는 관련 검색어 기능 추가하여 저장하는 기능을 파이썬으로 구현
 ->추후 자료 검색시 관련 검색어 또는 해시태그 검색으로 자료를 검색하여 찾아냄

기간 다음주 까지

 

일단 파일 및 폴더의 내용을 찾는 프로그램을 만든후 QTpy5 라이브러리로 gui 까지 구현해보자고 생각하였다.

 

 

 

 

프로그램의 전체적인 그림을 그렸다.

 

파일 내용 찾기 프로그램 시작

검색할 파일의 내용을 입력하세요 

입력 :


출력 

해당 내용이 들어 있는 파일의 목록 입니다.
파일 목록 : 파일1, 파일2,,,,,

 

일단 해시태그 검색과 관련 검색어 기능은 출력값에 포함하는것으로 한다.

 

먼저 진행 상황을 저장할 Git 레파지토리를 생성

main.py 파일을 생성 하여 코드를 작성 하였다.

 

과제 조건을 보아

 

윈도우 파일에 접근 할 수 있는 라이브러리를 활용해야겠다고 생각했다.

 

# os 모듈을 이용하여 지정된 폴더내의 파일명을 출력하는 프로그램

import pandas

import os

dir = 'C:/Users/ehdck/Desktop/FileFinder_python'

files = os.listdir(dir)


#파일명 출력하기

for file in files :

    print(file)

일단 간단한 지정된 폴더내의 있는 파일들을 전부 출력하는 프로그램을 작성하였다.

 

여기서 os.listdir()의 반환형은 무엇인가?

print(type(files))

출력 : list

 

os.listdir()은

현재 폴더에 있는 값들을 list 자료형에 저장하여 리턴한다.

 

여기서 생각해본것

 

'파일내용'에 접근해야 하는 방법.

 

파이썬에서 파일에 내용에 접근하고 수정하는 것을 핸들링이라고 한다.

 

일단 파일의 유형은 텍스트 파일 국한하여 생각하였다.

 

핸들링 절차

1) 텍스트 파일 접근하기

2) 텍스트 파일 읽거나 쓰기

3) 텍스트 파일 닫기

 

 

 

일단 파일의 내용을 테스트할 테스트 텍스트 파일을 생성 후

파일을 오픈하는 것은 open() 함수를 사용하였다.

fw = open('new.txt', 'w')

그리고 open 함수는 새로운 텍스트 파일이 없으면 자동으로 지정된 제목으로 텍스트 파일을 생성한다.

 

그러니 파일이 없을 경우 esle문으로 예외처리를 하였고

 

 readlines() 함수로 파일의 모든 내용을 출력하는 프로그램을 작성해보았다.

import os
filename = "new.txt"
if os.path.exists(filename):
    fr = open(filename, "r")
    line = fr.readlines()
    print(line)
    fr.close()
else:
    print("파일이 존재하지 않습니다.")

이때 해당 line 리스트에서 해당 search변수에 값이 있는경우 출력하게 해보았다.

 

search = "12345\n"

import os
filename = "new.txt"
if os.path.exists(filename):
    fr = open(filename, "r")
    line = fr.readlines()
    print(line)
    if search in line:
        print("해당 문자가 있습니다.")
    else:
        print("해당 문자가 없습니다.")
    fr.close()
else:
    print("파일이 존재하지 않습니다.")

여기서 문제는 한 줄 띄어쓰기 까지 포함이 되어 있어야 같은 값으로 인식했다.

 

파이썬 re모듈을 이용하여

re.sub(pattern, replacement, str) 함수로 줄바꿈 문자를 제거하여 라인별로 if문을 활용하였다.

 

search = "12345"

filename = "new.txt"
if os.path.exists(filename):
    fr = open(filename, "r")
    line = fr.readlines()
    for i in line:
        i = re.sub("\n", "", i)
        print(i)
        if search == i:
            print("해당 문자가 있습니다.")
        else:
            print("해당 문자가 없습니다.")
    fr.close()
else:
    print("파일이 존재하지 않습니다.")

'프로젝트 > 파일 내용 탐색 프로그램' 카테고리의 다른 글

6일차 마무리  (1) 2023.10.17
5일차 태그 기능 추가  (2) 2023.10.16
4일차 기능 추가 및 선택지 추가  (0) 2023.10.15
3일차 본격적인 코드 구현  (0) 2023.10.14
glob 모듈  (0) 2023.10.12