Skip to content

File Organizing with Python

Learn how to automate file organization in Python.


Python is the perfect tool to automate file organization. In this article you will learn how to use Python to rename, move, copy, and delete files and folders.

I also included an example script that cleans up your Desktop.

How to navigate and change the directory in Python

You can use os.getcwd() to get the current working directory, and os.chdir() to change into another directory:

import os

print(os.getcwd())

os.chdir("/Users/patrick/Desktop/video-files")

print(os.getcwd())
# /Users/patrick/Desktop/video-files

How to rename files in Python

You can use os.rename() or pathlib.Path.rename().

This example changes filenames from

  • 'dictionary - python-course-3.mov'

to -->

  • '03-python-course-dictionary.mov'
import os

for file in os.listdir():
    # split into base name and extension
    name, ext = os.path.splitext(file)

    splitted = name.split("-")
    splitted = [s.strip() for s in splitted]
    new_name = f"{splitted[3].zfill(2)}-{splitted[1]}-{splitted[2]}-{splitted[0]}{ext}"

    os.rename(file, new_name)

Or as modern alternative you can usepathlib.Path:

import os
from pathlib import Path

for file in os.listdir():
    f = Path(file)

    # split into base name and extension
    name, ext = f.stem, f.suffix

    splitted = name.split("-")
    splitted = [s.strip() for s in splitted]
    new_name = f"{splitted[3].zfill(2)}-{splitted[1]}-{splitted[2]}-{splitted[0]}{ext}"

    f.rename(new_name)

How to create directories:

You can use pathlib.Path.mkdir() or os.mkdir():

from pathlib import Path
Path("data").mkdir(exist_ok=True)

# or
import os
if not os.path.exists("data"):
    os.mkdir("data")

How to move files in Python

This can be done with the shutil module and shutil.move():

import shutil

shutil.move('source', 'destination')  # works for file and folder

How to copy files in Python

This can be done with shutil.copy() or shutil.copy2(). The latter also copies all metadata:

import shutil

shutil.copy('source', 'destination')  # new metatags
shutil.copy2('source', 'destination')  # copies metadata, too

How to delete files and folders in Python

For files we can use os.remove() and for empty folders os.rmdir(). To recursively delete non-empty folders we can use shutil.rmtree():

os.remove("filename")  # error if not found
os.rmdir("folder")  # error if not empty, or not found
shutil.rmtree("folder")  # works for non empty directories

Organize and clean up your Desktop with Python

This example script can be used to move images, videos, screenshots, and audio files into corresponding folders.

A great way to run this script automatically is by using a cron job. In this article you can learn how to schedule Python scripts as cron jobs with crontab (Mac/Linux).

import os
import shutil


audio = (".3ga", ".aac", ".ac3", ".aif", ".aiff",
         ".alac", ".amr", ".ape", ".au", ".dss",
         ".flac", ".flv", ".m4a", ".m4b", ".m4p",
         ".mp3", ".mpga", ".ogg", ".oga", ".mogg",
         ".opus", ".qcp", ".tta", ".voc", ".wav",
         ".wma", ".wv")

video = (".webm", ".MTS", ".M2TS", ".TS", ".mov",
         ".mp4", ".m4p", ".m4v", ".mxf")

img = (".jpg", ".jpeg", ".jfif", ".pjpeg", ".pjp", ".png",
       ".gif", ".webp", ".svg", ".apng", ".avif")

def is_audio(file):
    return os.path.splitext(file)[1] in audio

def is_video(file):
    return os.path.splitext(file)[1] in video

def is_image(file):
    return os.path.splitext(file)[1] in img

def is_screenshot(file):
    name, ext = os.path.splitext(file)
    return (ext in img) and "screenshot" in name.lower()

os.chdir("/Users/patrick/Desktop")

for file in os.listdir():
    if is_audio(file):
        shutil.move(file, "Users/patrick/Documents/audio")
    elif is_video(file):
        shutil.move(file, "Users/patrick/Documents/video")
    elif is_image(file):
        if is_screenshot(file):
            shutil.move(file, "Users/patrick/Documents/screenshots")
        else:
            shutil.move(file, "Users/patrick/Documents/images")
    else:
        shutil.move(file, "Users/patrick/Documents")

FREE VS Code / PyCharm Extensions I Use

✅ Write cleaner code with Sourcery, instant refactoring suggestions: Link*


PySaaS: The Pure Python SaaS Starter Kit

🚀 Build a software business faster with pure Python: Link*

* These are affiliate link. By clicking on it you will not have any additional costs. Instead, you will support my project. Thank you! 🙏