File Organizing with Python
Learn how to automate file organization in Python.
#more
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*
Python Problem-Solving Bootcamp
🚀 Solve 42 programming puzzles over the course of 21 days: Link*