Python How to Delete a Non-Empty Folder

Python remove a non-empty folder with shutil rmtree function

To remove a non-empty folder in Python, you can use the shutil module, which provides functions for copying and removing files and directories.

ATTENTION! This guide shows you how to permanently delete the files and directories. Make sure you’ve crafted the file paths so that you’re 100% sure to delete the directories you want to delete.

To remove a directory and all its contents, including any subdirectories and files, you can use the rmtree function.

For example:

import shutil

# Replace with the path to the directory you want to remove
directory = '/path/to/directory'

shutil.rmtree(directory)

This will remove the directory and all its contents, including any subdirectories and files. Notice that this approach does not delete read-only files! Instead, you’re going to see an error.

Let’s have a look at some alternative approaches to deleting non-empty folders with Python.

Alternative Approaches

1. The ‘os.walk’ Function

To remove a non-empty folder in Python, you can delete the files individually using the os.walk function.

Here’s what it looks like in the code:

import os

# Replace with the path to the directory you want to remove
directory = '/path/to/directory'

# Use os.walk to traverse the directory tree
for root, dirs, files in os.walk(directory):
    # For each file in the directory
    for file in files:
        # Construct the full path to the file
        file_path = os.path.join(root, file)
        # Delete the file
        os.remove(file_path)
    # For each subdirectory in the directory
    for dir in dirs:
        # Construct the full path to the subdirectory
        dir_path = os.path.join(root, dir)
        # Delete the subdirectory
        os.rmdir(dir_path)

# Delete the top-level directory
os.rmdir(directory)

This code uses the os.walk function to traverse the directory tree and delete each file and subdirectory within the specified directory. Once all the files and subdirectories have been deleted, the top-level directory is also deleted.

2. pathlib Module

To remove a non-empty folder in Python using the pathlib module, you can use the following code:

import pathlib

# A recursive function to remove the folder
def del_folder(path):
    for sub in path.iterdir():
        if sub.is_dir():
            # Delete directory if it's a subdirectory
            del_folder(sub)
        else :
            # Delete file if it is a file:
            sub.unlink()
    
    # This removes the top-level folder:
    path.rmdir()
    
# Example use
del_folder(pathlib.Path('path/to/folder'))

This code uses the iterdir method to traverse the directory tree and delete each file and subdirectory within the specified directory. Once all the files and subdirectories have been deleted, the top-level directory is also deleted.

Thanks for reading. Happy coding!

Read Also

How to Copy a File in Python