Skip to content

Instantly share code, notes, and snippets.

@costa86
Last active March 23, 2023 18:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save costa86/6a25cbf5db190dfa6c221a7e530b0b5a to your computer and use it in GitHub Desktop.
Save costa86/6a25cbf5db190dfa6c221a7e530b0b5a to your computer and use it in GitHub Desktop.
Python script to organize files by moving them to folders accordingly to their extensions
import os
import shutil
FOLDER = "/home/costa/Downloads"
NAME = "name"
EXTENSION = "extension"
EXTENSION_FOLDER_MAPPING = [
["text", ["doc", "docx", "pdf"]],
["image", ["png", "jpeg", "gif", "jpg"]],
["spreadsheet", ["xls", "xlsx", "csv"]],
["executable", ["deb", "iso"]],
["compressed", ["zip", "rar", "gz", "xz"]],
["ebook", ["epub", "mobi"]],
]
def get_folder_extension(extension: str) -> str | None:
for i in EXTENSION_FOLDER_MAPPING:
if extension in i[1]:
return i[0]
return None
def get_extension_list(folder_path: str) -> list[dict[str, str]]:
res = os.listdir(folder_path)
res = list(
filter(
lambda x: os.path.isfile(os.path.join(folder_path, x))
and not x.startswith("."),
res,
)
)
res = list(filter(lambda x: len(x.split(".")) > 1, res))
res = list(map(lambda i: {NAME: i, EXTENSION: i.split(".")[-1]}, res))
return res
def create_folders(folder: str, extension_list: list[dict[str, str]]):
for i in extension_list:
extension = i[EXTENSION]
extension_folder = get_folder_extension(extension)
if extension_folder:
extension_folder_path = os.path.join(folder, extension_folder)
if not os.path.exists(extension_folder_path):
os.mkdir(extension_folder_path)
def move_files_into_folders(folder: str, extension_list: list[dict[str, str]]):
for i in extension_list:
extension = i[EXTENSION]
file_name = i[NAME]
folder_name = get_folder_extension(extension)
if folder_name:
extension_path = os.path.join(folder, folder_name)
file_path = os.path.join(folder, file_name)
shutil.move(file_path, extension_path)
extension_list = get_extension_list(FOLDER)
create_folders(FOLDER, extension_list)
move_files_into_folders(FOLDER, extension_list)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment