Excerpt

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.
If you prefer a video, you can watch the tutorial here:
## 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:
```plain text
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'
```plain text
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:
```plain text
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():
```plain text
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:
```plain text
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:
```plain text
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():
```plain text
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).
```plain text
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")
```