반응형
Tkinter를 이용하여 GUI 창에서 폴더를 선택하면,
해당 폴더 내의 모든 파일과 하위폴더 내 모든 파일에 대해 MD5 값을 구하고
이를 CSV로 저장할 수 있도록 하는 프로그램입니다.
import sys,os
import hashlib
import tkinter
from tkinter import *
from tkinter import filedialog
from tkinter import messagebox
import csv
import re
def on_closing():
if messagebox.askokcancel("종료","종료하시겠습니까?"):
window.quit()
def save_btn():
with open('HASH분석결과.csv','w',newline='',encoding='utf-8-sig') as f:
wrr=csv.writer(f)
wrr.writerow(['파일명','MD5 hash 값'])
for kk,target in enumerate(file_list):
wrr.writerow([target, hash_list[kk]])
f.close()
window.quit()
root=tkinter.Tk()
root.withdraw()
dir_path=filedialog.askdirectory(parent=root,initialdir="./",title="선택하신 폴더 내부의 모든 파일을 검사합니다.(하위폴더 포함)")
print("\n선택하신 경로: ",dir_path)
file_list = os.listdir(dir_path)
# print(file_list)
folder_list=list()
hash_list=list()
# while(True):
file_list2=list()
for target in file_list:
if os.path.isdir(os.path.join(dir_path,target)):
folder_list.append(target)
else:
file_list2.append(target)
while(True):
folder_list2=list()
for target in folder_list:
file_list=os.listdir(os.path.join(dir_path,target))
for ttarget in file_list:
if os.path.isdir(os.path.join(dir_path,target,ttarget)):
folder_list2.append(os.path.join(target,ttarget))
else:
file_list2.append(os.path.join(target,ttarget))
folder_list=folder_list2
if folder_list2.__len__()==0:
break
file_list = file_list2
# print(file_list)
for target in file_list:
try:
with open(os.path.join(dir_path,target),'rb') as f:
data=f.read()
hash_list.append(hashlib.md5(data).hexdigest())
f.close()
except:
hash_list.append('Error')
print(target,'\t',hash_list[-1])
print('총 파일 수: ',file_list.__len__())
window=Tk()
label_text=''
for temp in file_list:
label_text=label_text+"\n"+temp
label1=Label(window,text=label_text,bg='white',justify='right')
label_text=''
for temp in hash_list:
label_text=label_text+"\n"+temp
label2=Label(window,text=label_text,bg='white',justify='left')
btn1 = Button(window,text="저장",command=save_btn)
label_head_0=Label(window,text="파일명",bg='white',justify='right',anchor='e')
label_head_1=Label(window,text="가지고 있는 파일 MD5 값",bg='white',justify='left',anchor='w')
label_head_0.grid(row=0,column=0)
label_head_1.grid(row=0,column=1)
label1.grid(padx=10,row=1,column=0)
label2.grid(padx=10,row=1,column=1)
btn1.grid(pady=10,row=2,column=0,sticky='nesw',columnspan=2)
window.title("HASH 분석")
window.configure(bg='white')
window.protocol("WM_DELETE_WINDOW",on_closing)
window.mainloop()
반응형
'PC > Programming' 카테고리의 다른 글
[Power automate desktop] 지정된 시각에 작동하도록 flow 짜기 (0) | 2021.03.14 |
---|---|
[Power automate desktop] 사용 후기 (0) | 2021.03.13 |
[Python-신한인디i] 동작하지 않는 example... (8) | 2020.11.13 |
[Telegram-bot] NAS_bot(윈도우OS실행파일) (0) | 2020.11.09 |
[Telegram-bot] NAS_bot(소스 코드) (0) | 2020.11.09 |
댓글