파이썬을 사용하면 이런 삶이 가능하다! <<< 실화
단돈 3만원이면 됩니다.
GPT 4.0
안쓰면 0원? 아니오. 안쓰면 -4850392340억원 손해예요.
네. 이번에는 무슨 일이 필요했냐?
업무에 새로운 제약조건이 생겼어요.
클래스에 100장까지만 이미지를 수집해주면 됐습니당
하지만 매번 몇개가 모였는지 확인하기가 어려웠어요.
import os
import glob
import tkinter as tk
from tkinter import filedialog, messagebox
# 이미지 확장자 정의
image_extensions = ('*.jpg', '*.jpeg', '*.png', '*.gif', '*.bmp')
def count_images_in_folder(folder_path):
# 해당 폴더 안의 이미지 파일 개수
return sum(len(glob.glob(os.path.join(folder_path, ext))) for ext in image_extensions)
def main():
# 폴더 선택 GUI
root = tk.Tk()
root.withdraw() # 기본 GUI 창 숨기기
selected_folder = filedialog.askdirectory(title="탐색할 최상위 폴더를 선택하세요")
if not selected_folder:
messagebox.showerror("오류", "폴더를 선택하지 않았습니다. 프로그램을 종료합니다.")
return
over_100_folders = []
# 전체 하위 폴더까지 재귀적으로 탐색
for current_folder, subfolders, _ in os.walk(selected_folder):
image_count = count_images_in_folder(current_folder)
if image_count >= 100:
# 루트 폴더 제외하고 상대경로로 출력 (가독성 좋게)
relative_path = os.path.relpath(current_folder, selected_folder)
over_100_folders.append(f"{relative_path} ({image_count}장)")
# 결과 출력
if over_100_folders:
result = "\n".join(over_100_folders)
messagebox.showinfo("100장 초과 폴더 목록", result)
else:
messagebox.showinfo("결과", "100장 초과 폴더가 없습니다.")
if __name__ == "__main__":
main()
초기버전은 이렇습니다!
100장이라는 수를 하드코딩해서 지정해줬어요.
os.walk를 통해 전부 돌아다녀줬어요.
저때는 80장 이상 목록을 찾기 위해 100을 80으로 수정해 돌려줬답니다.
한눈에 어떤 클래스가 100장을 넘겼는지 확인 가능하죠
import os
import glob
import tkinter as tk
from tkinter import filedialog, messagebox, simpledialog
# 이미지 확장자 정의
image_extensions = ('*.jpg', '*.jpeg', '*.png', '*.gif', '*.bmp')
def count_images_in_folder(folder_path):
return sum(len(glob.glob(os.path.join(folder_path, ext))) for ext in image_extensions)
def scan_folder(folder_path, min_count):
over_min_folders = []
for current_folder, subfolders, _ in os.walk(folder_path):
image_count = count_images_in_folder(current_folder)
if image_count >= min_count:
relative_path = os.path.relpath(current_folder, folder_path)
over_min_folders.append(f"{relative_path} ({image_count}장)")
return over_min_folders
def show_result_and_options(folder_path, min_count):
while True:
over_min_folders = scan_folder(folder_path, min_count)
result_window = tk.Toplevel()
result_window.title("탐색 결과")
if over_min_folders:
result_text = "\n".join(over_min_folders)
else:
result_text = f"{min_count}장 이상 이미지가 있는 폴더가 없습니다."
label = tk.Label(result_window, text=result_text, justify="left")
label.pack(padx=10, pady=10)
def close_and_rescan():
result_window.destroy()
show_result_and_options(folder_path, min_count)
def close_and_change_folder():
result_window.destroy()
main()
def close_program():
root.quit()
button_frame = tk.Frame(result_window)
button_frame.pack(pady=10)
tk.Button(button_frame, text="다시 탐색하기", command=close_and_rescan).grid(row=0, column=0, padx=5)
tk.Button(button_frame, text="폴더 변경하기", command=close_and_change_folder).grid(row=0, column=1, padx=5)
tk.Button(button_frame, text="종료하기", command=close_program).grid(row=0, column=2, padx=5)
break
def main():
global root
root = tk.Tk()
root.withdraw()
selected_folder = filedialog.askdirectory(title="수집 이미지 개수")
if not selected_folder:
messagebox.showerror("오류", "폴더를 선택하지 않았습니다. 프로그램을 종료합니다.")
return
# 사용자에게 기준 이미지 개수 입력 받기
min_count = simpledialog.askinteger("기준값값", "N장 이상 포함된 폴더를 찾습니다. 기준값을을 입력하세요:", minvalue=1)
if not min_count:
messagebox.showerror("오류", "유효한 숫자를 입력하지 않았습니다. 프로그램을 종료합니다.")
return
root.deiconify()
root.withdraw()
show_result_and_options(selected_folder, min_count)
root.mainloop()
if __name__ == "__main__":
main()
이후 파이썬 exe 파일을 만드는 방식을 통해서 생성해줬어요
이미지는 아무사진이나 주워서 ico 파일로 변환
pyinstaller --onefile --icon=your_icon.ico check_amount.py
아이콘 이름을 넣어주고 실행해주면 위 exe 파일이 생성돼요!
tkinter을 이용해서 탐색할 폴더를 선택해요.
root = tk.Tk()
root.withdraw()
selected_folder = filedialog.askdirectory(title="수집 이미지 개수")
min_count = simpledialog.askinteger("기준값값", "N장 이상 포함된 폴더를 찾습니다. 기준값을을 입력하세요:", minvalue=1)
이렇게 값을 받아주고
돌려주면 짠
원하는 개수를 입력해서 탐색할 수 있어요
그리고 계속 수시로 체크할 수 있게 다시탐색하기, 폴더변경하기, 종료하기 기능도 추가 완료.
굿.
최소 30분이 걸릴 일을 1초만에 끝낼 수 있어요.
파이썬 멋있다