2022.09.18 - [파이썬 실습/검색프로그램 만들기] - 파이썬 GUI 파일검색 프로그램 만들기-키워드 버전
) 하겠습니다.(본 블로그의 내용은 유튜브 동영상(파이썬 GUI 파일내용 검색 프로그램 만들기)에서 더욱 자세히 보실 수 있습니다.)
# -*- coding: utf-8 -*-
from fileinput import filename
import sys
import glob
from PyQt5.QtWidgets import *
from PyQt5 import uic, QtCore, QtGui, QtWidgets
import os
import time
from PyQt5.QtGui import *
form_class = uic.loadUiType("fileContent_Search6.ui")[0]
class MyWindow(QMainWindow, form_class):
def __init__(self):
super().__init__()
self.setFixedSize(570,582)
self.setWindowIcon(QIcon("pagichacha.png"))
self.setupUi(self)
self.pushButton.clicked.connect(self.searchFile)
self.toolButton_3.clicked.connect(self.keywordSelectFile)
self.toolButton.clicked.connect(self.selectFolder)
self.toolButton_2.clicked.connect(self.selectSaveFile)
self.pushButton_2.clicked.connect(self.saveFile)
def searchFile(self):
global folder_size_total
folder_size_total = 0
if self.lineEdit_2.text():
folder = self.lineEdit_2.text()
else:
folder = 'F:/Temp2'
if self.lineEdit.text():
userInputKeywords = self.lineEdit.text()
userInputKeywords = userInputKeywords.strip()
newuserInputKeywords = userInputKeywords.split(';')
print(newuserInputKeywords)
self.textEdit.clear()
for userInputKeyword in newuserInputKeywords:
print(userInputKeyword)
userInputKeyword = userInputKeyword.strip()
print(userInputKeyword)
# for filename in glob.glob(folder+'\\**/*'+userInputKeyword+'*', recursive=True):
# print(filename)
# self.textEdit.append(str(filename))
# time.sleep(0.01)
for (path, dir, files) in os.walk(folder): # 특정 경로에 존재하는 모든 하위 디렉토리를 탐색하며 원하는 파일을 찾고자 할때 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 userInputKeyword in f.read(): # 파일 내용 중 키워드(예: '이력서')가 존재하면 if문 실행
print("===========================================================")
print(path+os.sep+filename, " \t파일에 '", userInputKeyword, "' 단어가 포함되어 있습니다.")
self.textEdit.append(str(path+os.sep+filename)+" \t파일에 '"+str(userInputKeyword)+"' 단어가 포함되어 있습니다.")
else:
pass # 파일 내용 중 키워드("예: 이력서")가 존재하지 않으면 아무것도 하지 않고 다음 단계로 넘어감
f.close()
except: # except에 pass로 지정해 주면 에러가 발생하더라도 중지되지 않고, skip하여 다음 단계로 넘어간다.
pass
time.sleep(0.01)
time.sleep(0.01)
print("===========================================================")
time.sleep(0.01)
else:
self.textEdit.setText("키워드와 검색할 폴더를 입력(선택)해 주세요.")
def keywordSelectFile(self):
file = QtWidgets.QFileDialog.getOpenFileName(self, 'Open file', './')
print(file[0], "test")
with open(file[0], encoding='utf-8') as f:
keywords = f.read()
print(keywords)
self.lineEdit.setText('{}'.format(keywords))
def selectFolder(self):
directory = str(QtWidgets.QFileDialog.getExistingDirectory())
self.lineEdit_2.setText('{}'.format(directory))
def selectSaveFile(self):
savefilename = QFileDialog.getSaveFileName(self, "Save File")
print(type(savefilename))
print(savefilename)
self.lineEdit_3.setText('{}'.format(savefilename[0]))
def saveFile(self):
savefilename = self.lineEdit_3.text()
readfile = self.textEdit.toPlainText()
if savefilename and readfile:
print(type(savefilename))
try:
with open(savefilename, 'w+', encoding='utf8') as out:
out.write(readfile + "\n")
out.close()
self.clickMethod2()
self.lineEdit_3.setText("")
except:
print("파일이 저장되지 않고, 에러가 발생하였습니다.")
else:
QMessageBox.about(self, "경고!!", "검색 결과가 없거나, 저정할 파일을 지정하지 않았습니다.")
# # def clickMethod(self):
# # QMessageBox.about(self, "주의!!", "파일 검색 사이즈가 너무 작습니다. (1000 bytes 이상)")
def clickMethod2(self):
QMessageBox.about(self, "파일저장!!", "파일이 저장되었습니다.")
app=QApplication(sys.argv)
window = MyWindow()
window.show()
print("Before event loop")
app.exec_()
print("After event loop")
for (path, dir, files) in os.walk(folder): <-- 이 구문을 통하여 F:/Temp2 경로에 존재하는 모든 파일과 디렉토리를 점검합니다.
for filename in files: <-- 파일들에서 for문을 이용하여 파일 하나씩 돌면서 확인합니다.
with open(path+os.sep+filename, 'r', encoding='UTF8') as f: <-- 파일(전체경로(path+os.sep+filename)로)을 한글(encoding='UTF8')을 포함한 읽기모드('r')로 엽니다.
if userInputKeyword in f.read(): <-- 만약 파일 내용 중에 유저가 입력한 키워드(또는 파일로 불러온 키워드)가 존재하면
self.textEdit.append(str(path+os.sep+filename)+" \t파일에 '"+str(userInputKeyword)+"' 단어가 포함되어 있습니다.") <-- 텍스트에디트(textEdit) 창에 해당 문구(F:/Temp2\나의 이력서입니다..txt 파일에 ' 개인정보 ' 단어가 포함되어 있습니다.)를 append(추가)로 붙여 넣습니다.
이하 내용은 앞서 말씀드린 '파이썬 GUI 파일검색 프로그램 만들기-키워드 버전 ' 의 내용과 동일합니다.
위의 내용이 유익하셨다면, 좋아요와 구독 부탁드립니다.
감사합니다.
'파이썬 실습 > 검색프로그램 만들기' 카테고리의 다른 글
파이썬 GUI 파일검색 프로그램 만들기-키워드 버전 (0) | 2022.09.18 |
---|---|
파이썬 파일검색프로그램 만들기(키워드 버전 ) (0) | 2022.08.31 |
파이썬 파일내용 검색 프로그램 만들기 (2) | 2022.08.20 |
파이썬 GUI 파일검색 프로그램 만들기-파일크기 버전 (0) | 2022.08.17 |