diff --git a/Downloads/hi.py b/Codes/hi.py similarity index 100% rename from Downloads/hi.py rename to Codes/hi.py diff --git a/Downloads/Downloaded_Files.zip b/Downloads/Downloaded_Files.zip new file mode 100644 index 0000000..92c1747 Binary files /dev/null and b/Downloads/Downloaded_Files.zip differ diff --git a/File_sorter.py b/File_sorter.py index 1ac22e1..d679516 100644 --- a/File_sorter.py +++ b/File_sorter.py @@ -1,60 +1,113 @@ -#File Sorter by Mahesh Sawant - -import os,shutil - -s=os.chdir("Downloads") -current = os.getcwd() - -files=os.listdir(current) - -images=[".jpeg",".png",".jpg",".gif"] #extensions for images -text=[".doc",".txt",".pdf",".xlsx",".docx",".xls",".rtf"] #extensions for text files -videos=[".mp4",".mkv"] #extensions for videos -sounds=[".mp3",".wav",".m4a"] #extensions for sounds -applications=[".exe",".lnk"] #extensions for applications -codes = [".c",".py",".java",".cpp",".js",".html",".css",".php"] #extensions for codes - -print("Sorting the files...") - -for file in files: - dest = "" - for ex in images: - if file.endswith(ex): - dest='../Images' - shutil.move(file,dest) - break - - for ex in text: - if file.endswith(ex): - dest='../Text' - shutil.move(file,dest) - break - - for ex in sounds: - if file.endswith(ex): - dest='../Sounds' - shutil.move(file,dest) - break - - for ex in videos: - if file.endswith(ex): - dest='../Videos' - shutil.move(file,dest) - break - - for ex in applications: - if file.endswith(ex): - dest= '../Applications' - shutil.move(file,dest) - break - - for ex in codes: - if file.endswith(ex): - dest= '../Codes' - shutil.move(file,dest) - break - - if dest == "": - shutil.move(file,'../Others') - -print("Sorting Completed...") +import os +import shutil +import zipfile + +def get_size(directory): + """Return the total size of the directory.""" + total_size = 0 + for dirpath, dirnames, filenames in os.walk(directory): + for filename in filenames: + filepath = os.path.join(dirpath, filename) + total_size += os.path.getsize(filepath) + return total_size + +def ensure_directory_exists(path): + """Create the directory if it doesn't exist.""" + if not os.path.exists(path): + os.makedirs(path) + +def zip_dir(directory, zip_filename): + """Create a zip file from the contents of a directory.""" + with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as zipf: + for root, dirs, files in os.walk(directory): + for file in files: + file_path = os.path.join(root, file) + arcname = os.path.relpath(file_path, start=directory) + zipf.write(file_path, arcname) + +# Define the paths +downloads_dir = os.path.join(os.path.expanduser("~"), "Downloads") +directories = { + 'Images': os.path.join(downloads_dir, 'Images'), + 'Text': os.path.join(downloads_dir, 'Text'), + 'Videos': os.path.join(downloads_dir, 'Videos'), + 'Sounds': os.path.join(downloads_dir, 'Sounds'), + 'Applications': os.path.join(downloads_dir, 'Applications'), + 'Codes': os.path.join(downloads_dir, 'Codes'), + 'Others': os.path.join(downloads_dir, 'Others') +} + +# Define file extensions +file_categories = { + 'Images': [".jpeg", ".png", ".jpg", ".gif", ".bmp", ".tiff", ".webp", ".ico", ".svg", ".heif", ".jfif", ".raw", ".indd", ".ai", ".eps"], + 'Text': [".doc", ".txt", ".pdf", ".xlsx", ".docx", ".xls", ".rtf", ".md", ".odt", ".csv", ".tsv", ".tex", ".log", ".json", ".yaml", ".xml"], + 'Videos': [".mp4", ".mkv", ".avi", ".mov", ".wmv", ".flv", ".webm", ".mpeg", ".mpg", ".mts", ".m2ts", ".3gp", ".rm", ".rmvb", ".vob"], + 'Sounds': [".mp3", ".wav", ".m4a", ".aac", ".ogg", ".flac", ".opus", ".wma", ".aiff", ".cda"], + 'Applications': [".exe", ".lnk", ".app", ".bat", ".sh", ".apk", ".jar", ".msi", ".run", ".pkg", ".dmg"], + 'Codes': [".c", ".py", ".java", ".cpp", ".js", ".html", ".css", ".php", ".go", ".h", ".asm", ".rs", ".swift", ".kt", ".pl", ".lua", ".sh", ".v", ".r", ".scala", ".groovy", ".clj", ".dart", ".yaml", ".coffee", ".m", ".xsl", ".sml", ".ml", ".fs", ".ts"] +} + +# Get size of the Downloads directory +dir_size = get_size(downloads_dir) +print(f"Size of Downloads directory: {dir_size / (1024 * 1024):.2f} MB") + +# Check if the size is greater than 100 MB +if dir_size > 100 * 1024 * 1024: + print("The Downloads folder is larger than 100 MB. Skipping zip file creation.") + create_zipfile = 'n' +else: + create_zipfile = input("Create a download zip file? [Y/N]: ") + +if create_zipfile.lower() == 'y': + try: + print("Creating zip file...") + zip_filename = os.path.join(downloads_dir, 'Downloaded_Files.zip') + zip_dir(downloads_dir, zip_filename) + print(f"Download zip file created successfully: {zip_filename}") + except Exception as e: + print(f"An error occurred while creating the zip file: {e}") + +# Ask if the user wants to create missing folders +print("Warning: Ensure that the following folders exist before running this script:") +print(" - Images") +print(" - Text") +print(" - Videos") +print(" - Sounds") +print(" - Applications") +print(" - Codes") +print(" - Others") +create_folders = input("Create missing folders if they don't exist? [Y/N]: ") +if create_folders.lower() == 'y': + for path in directories.values(): + ensure_directory_exists(path) + print("Missing folders created.") + +# Confirm that the user is ready to proceed with sorting +confirm_sort = input("Proceed with sorting the files? [Y/N]: ") +if confirm_sort.lower() == 'y': + print("Starting file sorting...") + files = os.listdir(downloads_dir) + for file in files: + file_path = os.path.join(downloads_dir, file) + if os.path.isfile(file_path): + moved = False + for category, extensions in file_categories.items(): + if any(file.endswith(ext) for ext in extensions): + dest = directories[category] + try: + print(f"Moving {file} to {category}...") + shutil.move(file_path, os.path.join(dest, file)) + moved = True + break + except Exception as e: + print(f"An error occurred while moving file {file} to {category}: {e}") + if not moved: + try: + print(f"Moving {file} to Others...") + shutil.move(file_path, os.path.join(directories['Others'], file)) + except Exception as e: + print(f"An error occurred while moving file {file} to 'Others': {e}") + + print("Sorting Completed...") +else: + print("Sorting canceled.")