From 058cfc854772da2f439fa5fb58aef038068cd468 Mon Sep 17 00:00:00 2001 From: Kartheek1508 Date: Fri, 31 Oct 2025 20:15:38 +0530 Subject: [PATCH] Added file_sorter.py --- #1747_Auto_file_sorter/README.md | 17 +++++ #1747_Auto_file_sorter/file_sorter.py | 100 ++++++++++++++++++++++++++ .DS_Store | Bin 34820 -> 63492 bytes 3 files changed, 117 insertions(+) create mode 100644 #1747_Auto_file_sorter/README.md create mode 100644 #1747_Auto_file_sorter/file_sorter.py diff --git a/#1747_Auto_file_sorter/README.md b/#1747_Auto_file_sorter/README.md new file mode 100644 index 00000000..dfa58f48 --- /dev/null +++ b/#1747_Auto_file_sorter/README.md @@ -0,0 +1,17 @@ +# File Sorter + +A simple Python app that organizes files in a folder by type using a small Tkinter GUI. + +--- + +## Features +- Select a folder from your computer +- Sort files into folders (Images, PDFs, Text Files, etc.) +- Preview mode lets you see what will happen before moving files + +--- + +## How to Use +1. Run the script: + ```bash + python file_sorter.py diff --git a/#1747_Auto_file_sorter/file_sorter.py b/#1747_Auto_file_sorter/file_sorter.py new file mode 100644 index 00000000..14647cb5 --- /dev/null +++ b/#1747_Auto_file_sorter/file_sorter.py @@ -0,0 +1,100 @@ +import tkinter as tk +from tkinter import filedialog,Text,Frame,Button,INSERT,END,WORD,BOTH,LEFT,RIGHT,TRUE,Checkbutton,Listbox,Scrollbar,Y +from pathlib import Path +import shutil + +selected_folder = None +global file_ex +def select_dir(): + global selected_folder + selected_folder = filedialog.askdirectory() + if selected_folder: + l.config(text=f"Selected folder: {selected_folder}") + +def organize_files(): + if selected_folder: + target_dir = Path(selected_folder) + is_preview = preview.get() # Get checkbox value + sort_files(selected_folder, target_dir, is_preview) + +def dynamic_lw(listbox,files): + longest = max(files,key=len) + n_width = len(longest) + listbox.config(width = n_width) + +def sort_files(dir,target_dir,preview,): + file_types = { + ".pdf" : "PDF's", + ".exe" : "Applications", + ".zip" : "Zip_files", + ".jpeg": "Images", + ".png" : "Images", + ".jpg" : "Images", + ".xlsx": "Excel_Files", + ".docx": "Word_Documents", + ".txt" :"Text_Files" +} + scroll = Scrollbar(canvas) + preview_listbox = Listbox(canvas, relief=tk.RIDGE, yscrollcommand=scroll.set) + scroll.config(command=preview_listbox.yview) + + + if preview: + scroll.pack(side=RIGHT, fill=Y) + preview_listbox.pack(fill=BOTH, expand=True) + preview_listbox.delete(0, tk.END) # Clear previous results + + + for file in target_dir.iterdir(): + if file.is_file(): + file_ex = file.suffix.lower() + + if file_ex not in file_types: + if preview: + preview_listbox.insert(tk.END, f"{file_ex} is not supported") + else: + if preview: + + preview_listbox.insert(tk.END, f"Would move: {file.name} -> {file_types[file_ex]}") + else: + + folder_path = Path(dir) / file_types[file_ex] + folder_path.mkdir(exist_ok=True) + shutil.move(file, folder_path) + +canvas = tk.Tk() +canvas.geometry("300x250") +canvas.title("File Sorter") + +frame = tk.Frame(master=canvas, relief=tk.RIDGE, borderwidth=5) +frame.pack(padx=10,pady=5) +frame.config() + +l= tk.Label(master=frame,text = "Slected folder : No folder is sleected") +l.pack(in_=frame) + +b1 = Button(master=frame , text="Select",command = select_dir) +b1.pack() + +Checkbutton1 = tk.IntVar() +preview = tk.IntVar() +Button1 = Checkbutton(canvas, text = "Log", + variable = Checkbutton1, + onvalue = 1, + offvalue = 0, + height = 2, + width = 10) + +Button2 = Checkbutton(canvas, text = "Preview", + variable = preview, + onvalue = 1, + offvalue = 0, + height = 2, + width = 10) + +b2= Button(canvas, text="Organize", command = organize_files) + +Button1.pack() +Button2.pack() +b2.pack() +canvas.mainloop() \ No newline at end of file diff --git a/.DS_Store b/.DS_Store index cec2e242509b328b20ac67429ac5d6250d0b093e..cc9f07a1ef77b1203435bab1c41b13a3114f9720 100644 GIT binary patch literal 63492 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 z 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 HD*yjKX#kAk delta 950 zcmZuwdrZ?;7`^w`2QBR=Ojn}Wg390z=dx;%Y(pCc1&b>ISyfaBPz2h578KB`NFB(? zhDvuB#PU#rLoqB7uh}wD@DVq0jMWFeXfkCZXdFWqNX9VgttBxr`;v3dz4y!g@|~OW zRX!F~)(WA75E@gmaWNqdzLjx!IZ#Q6ASYxVXN@!TJvB}DWdjK*CN{E(WO2536}3@l zCd3jc&x&!%vVlsVbRdR0iWf6qRF#UxeCRU^9EmbHor5(Et2puppU4 zET{aEhfKkbYB38}j)>?2D3g=$C^-iCtCq3JlwD$st&L}sso@ma>+A99hRZB3{TO9x zS&+EPp%thGmdJ(77#T|u_MwSQ$32x`uhGcfN<1xKN}K{!rUxHnwL@W!$G7JFuw}QP zd1E{t<^*7Q&O$Wj7;!Xr4J4M6&eC`3Ql_*f3Uka{vNfT=mi~#d!zJUiq+feu-xv(_zn{)c0NPz zu4)`8i^Nn}HM)1Z(OsVGbi7TqXmT_lb}s!c^ltscS73-}2Cv9h{MfrT`riJYZs8i4`VDjaHD347BKmeDK~ zka5_7;MQn1-TJ1$Dvr#iY`lH8fNdQHOn2z9_4pEu9dBZaPNfJXQUg9ap~JeaVGN$s zBZJwI<_dXPnMI%K5?JgHIsxN9_G9X_3s1TY*mK5%#ob^4)%Xf6+T~h*QN0PtsIk5J%ZfJ z*j2ZN;+tz}c>j6}d*{Yn0YBd~BJWl%l5SVw>KzZ}4}HzTJX~g!pAM>fcd>T3AJ#t% zauqR=IFd?C`10d0$pY@k8d&~pMbbzWR*xDnGFpSS2mj#CLj&&rx>@UM!QV#?Z%1*j z4GABVXpUr#OpZb&ckz%2s)