Links
Comment on page

Organize Directories based on file types

Tags: #organize #files #directories
Author: Ahmed Mousa
Last update: 2023-04-12 (Created: 2022-11-11)
Description: This notebook organizes your files based on their extensions to directories for data scientists

Input

Import libraries

from shutil import move
from os import path
import os
import glob
import pathlib

Variables

files_path = "" # Put the path to where your unorganized files are # Leave it as it's if your files are in the same folder with this notebook
exclude_files = [] # Add files to exclude from moving as you wish here in this list
exclude_files.append("Python_Organize_Directories_based_on_file_types.ipynb")
folders_extension = {
"Programming Files": [
"ipynb",
"py",
"java",
"cs",
"js",
"vsix",
"jar",
"cc",
"ccc",
"html",
"xml",
"kt",
],
"Data": {
"Structured Data": [
"txt",
"pdf",
"doc",
"pdf",
"ppt",
"pps",
"docx",
"pptx",
"csv",
"xlsx",
"xlsm",
"xlsb",
"xltx",
"xltm",
"xls",
"xlt",
"xls",
"xml",
"xla",
"xlam",
"xlw",
"xlr",
],
"Unstructured Data": {
"Images": [
"jpeg",
"jpg",
"png",
"gif",
"tiff",
"raw",
"webp",
"jfif",
"ico",
"psd",
"svg",
"ai",
],
"Videos": [
"mp4",
"webm",
"mkv",
"MPG",
"MP2",
"MPEG",
"MPE",
"MPV",
"OGG",
"M4P",
"M4V",
"WMV",
"MOV",
"QT",
"FLV",
"SWF",
"AVCHD",
"avi",
"mpg",
"mpe",
"mpeg",
"asf",
"wmv",
"mov",
"qt",
"rm",
],
"Audio": [
"mp3",
"wav",
"wma",
"mpa",
"ram",
"ra",
"aac",
"aif",
"m4a",
"tsa",
],
},
"Compressed": [
"zip",
"rar",
"arj",
"gz",
"sit",
"sitx",
"sea",
"ace",
"bz2",
"7z",
],
},
}

Model

def create_folder(folder_name):
if not os.path.exists(folder_name):
os.makedirs(folder_name)
def move_file(file_path, desired_folder_path):
if not file_path in exclude_files:
create_folder(desired_folder_path)
move(file_path, desired_folder_path)
print(f"Moved file: {file_path}, to {desired_folder_path}")
def organize_files():
for file in glob.glob(files_path + "*"):
if os.path.isdir(file):
continue
file_name_path = file
file_extiension = pathlib.Path(file).suffix.replace(".", "")
for folder in folders_extension.keys():
if isinstance(folders_extension[folder], list):
if file_extiension in folders_extension[folder]:
target_folder_path = os.path.join(files_path, folder)
move_file(file, target_folder_path)
else:
if isinstance(folders_extension[folder], list):
for sub_folder in folders_extension[folder]:
if file_extiension in folders_extension[folder][sub_folder]:
target_folder_path = os.path.join(
files_path, folder, sub_folder
)
move_file(file, target_folder_path)
else:
for sub_folder in folders_extension[folder]:
if isinstance(folders_extension[folder][sub_folder], list):
if file_extiension in folders_extension[folder][sub_folder]:
target_folder_path = os.path.join(
files_path, folder, sub_folder
)
move_file(file, target_folder_path)
else:
for ssub_folder in folders_extension[folder][sub_folder]:
if (
file_extiension
in folders_extension[folder][sub_folder][
ssub_folder
]
):
target_folder_path = os.path.join(
files_path, folder, sub_folder, ssub_folder
)
move_file(file, target_folder_path)

Output

organize_files()