Skip to content

Instantly share code, notes, and snippets.

@joao-coimbra
Last active November 22, 2024 17:37
Show Gist options
  • Select an option

  • Save joao-coimbra/5286b29684f8041f3441fbba57fa451d to your computer and use it in GitHub Desktop.

Select an option

Save joao-coimbra/5286b29684f8041f3441fbba57fa451d to your computer and use it in GitHub Desktop.
organize your downloads folder
import os
import shutil
def organize_folder(folder):
file_types = {
'Images': ['.jpeg', '.jpg', '.png', '.gif', '.svg'],
'Videos': ['.mp4', '.avi', '.mov'],
'Documents': ['.pdf', '.docx', '.txt'],
'Programs': ['.exe', '.msi'],
'Archives': ['.zip', '.rar']
}
others_folder = os.path.join(folder, 'Others')
archives_folder = os.path.join(folder, 'Archives')
os.makedirs(others_folder, exist_ok=True)
os.makedirs(archives_folder, exist_ok=True)
for filename in os.listdir(folder):
file_path = os.path.join(folder, filename)
if os.path.isdir(file_path):
if filename not in file_types.keys() and filename != 'Others' and filename != 'Archives':
shutil.move(file_path, os.path.join(archives_folder, filename))
print(f"Moved folder {filename} to Archives")
continue
ext = os.path.splitext(filename)[1].lower()
moved = False
for folder_name, extensions in file_types.items():
if ext in extensions:
target_folder = os.path.join(folder, folder_name)
os.makedirs(target_folder, exist_ok=True)
shutil.move(file_path, os.path.join(target_folder, filename))
print(f'Moved {filename} to {folder_name}')
moved = True
break
if not moved:
shutil.move(file_path, os.path.join(others_folder, filename))
print(f'Moved {filename} to Others')
for root, dirs, files in os.walk(folder, topdown=False):
for d in dirs:
dir_path = os.path.join(root, d)
if not os.listdir(dir_path):
os.rmdir(dir_path)
print(f'Removed empty folder: {dir_path}')
organize_folder('path/to/Downloads')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment