|
| 1 | +import os |
| 2 | +import shutil |
| 3 | +import tkinter as tk |
| 4 | +from tkinter import filedialog, messagebox |
| 5 | + |
| 6 | +FILE_CATEGORIES = { |
| 7 | + "Images": [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".svg", ".tiff", ".webp", ".ico", ".heic", ".raw", ".nef", |
| 8 | + ".cr2"], |
| 9 | + "Documents": [".pdf", ".docx", ".doc", ".txt", ".pptx", ".ppt", ".csv", ".odt", ".rtf", ".tex", ".log"], |
| 10 | + "E-Books": [".epub", ".mobi", ".azw3", ".fb2", ".djvu"], |
| 11 | + "Music": [".mp3", ".wav", ".flac", ".aac", ".ogg", ".wma", ".m4a", ".aiff", ".opus"], |
| 12 | + "Videos": [".mp4", ".avi", ".mov", ".mkv", ".flv", ".wmv", ".webm", ".mpeg", ".mpg", ".3gp"], |
| 13 | + "Archives": [".zip", ".rar", ".7z", ".tar", ".gz", ".bz2", ".xz", ".iso"], |
| 14 | + "Program Files": [".py", ".js", ".html", ".css", ".cpp", ".c", ".java", ".php", ".rb", ".swift", ".cs", ".go", |
| 15 | + ".ts", ".sh", ".bat", |
| 16 | + ".ps1", ".json", ".xml", ".yaml", ".ini", ".pl", ".lua", ".kt", ".rs"], |
| 17 | + "Executables": [".exe", ".msi", ".apk", ".app", ".deb", ".rpm", ".run"], |
| 18 | + "Fonts": [".ttf", ".otf", ".woff", ".woff2"], |
| 19 | + "CAD & 3D Models": [".dwg", ".dxf", ".stl", ".obj", ".step", ".iges", ".skp", ".blend", ".3ds"], |
| 20 | + "Torrents": [".torrent"], |
| 21 | + "Backups": [".bak", ".bkp", ".backup", ".old"], |
| 22 | + "Disk Images": [".iso", ".img", ".vmdk", ".dmg"], |
| 23 | + "Database Files": [".sql", ".sqlite", ".db", ".mdb", ".accdb"], |
| 24 | + "Spreadsheets": [".xls", ".xlsx", ".ods"], |
| 25 | +} |
| 26 | + |
| 27 | + |
| 28 | +def organize_files(directory): |
| 29 | + """Функция за подреждане на файловете в избраната директория.""" |
| 30 | + if not directory: |
| 31 | + messagebox.showerror("Грешка / Error", "Моля, изберете директория! / Please choose a directory") |
| 32 | + |
| 33 | + return |
| 34 | + |
| 35 | + for folder in FILE_CATEGORIES.keys(): |
| 36 | + folder_path = os.path.join(directory, folder) |
| 37 | + os.makedirs(folder_path, exist_ok=True) |
| 38 | + |
| 39 | + for file in os.listdir(directory): |
| 40 | + file_path = os.path.join(directory, file) |
| 41 | + if os.path.isfile(file_path): |
| 42 | + for folder, extensions in FILE_CATEGORIES.items(): |
| 43 | + if file.lower().endswith(tuple(extensions)): |
| 44 | + shutil.move(file_path, os.path.join(directory, folder)) |
| 45 | + break |
| 46 | + |
| 47 | + messagebox.showinfo("Готово! / Done!", "Файловете са подредени успешно! ✅ / Files sorted successfully! ✅!") |
| 48 | + |
| 49 | + |
| 50 | +def choose_directory(): |
| 51 | + """Отваря прозорец за избор на директория.""" |
| 52 | + folder_selected = filedialog.askdirectory() |
| 53 | + if folder_selected: |
| 54 | + organize_files(folder_selected) |
| 55 | + |
| 56 | + |
| 57 | + |
| 58 | +root = tk.Tk() |
| 59 | +root.title("File Organizer") |
| 60 | +root.geometry("400x200") |
| 61 | + |
| 62 | +btn_select = tk.Button(root, text="Избери папка и подреди!\n" |
| 63 | + "Choose a folder and organize!", |
| 64 | + command=choose_directory, padx=10, pady=5) |
| 65 | +btn_select.pack(pady=50) |
| 66 | + |
| 67 | + |
| 68 | +root.mainloop() |
0 commit comments