What’s New ?

The Top 10 favtutor Features You Might Have Overlooked

Read More

Delete a File in Python: 5 Methods to Remove Files (with code)

  • Nov 13, 2023
  • 8 Minutes Read
  • Why Trust Us
    We uphold a strict editorial policy that emphasizes factual accuracy, relevance, and impartiality. Our content is crafted by top technical writers with deep knowledge in the fields of computer science and data science, ensuring each piece is meticulously reviewed by a team of seasoned editors to guarantee compliance with the highest standards in educational content creation and publishing.
  • By Komal Gupta
 Delete a File in Python: 5 Methods to Remove Files (with code)

Deleting files is a common task in Python programming, whether you are working with large datasets or simply cleaning up your system. In this article, we will explore various methods to delete files and directories in Python. We will cover different scenarios, including deleting individual files, removing empty and non-empty directories, as well as error handling techniques. So let's dive in and learn how to effectively delete files in Python.

What are Files in Python?

In Python, a file is a named location on disk or in memory used to store data. Files are used for various purposes, such as reading and writing data, storing configurations, logging information, and more. Python provides a built-in open() function to interact with files. The file can be of different sizes and there are various methods to determine the file size in python.

There are two types of files in Python:

  • Text Files:
    • These files contain plain text and are human-readable.
    • They can be opened and edited using a simple text editor.
    • Examples include .txt, .csv, and .html files.

  • Binary Files:
    • These files contain binary data and are not human-readable.
    • They can store images, executables, or any data that is not in plain text.
    • Examples include image files (.jpg, .png), audio files (.mp3), and database files.

Read this article to learn how to read a file in python.

Deleting a File

In python following modules enable you to perform this type of task:

  1. Import Os: Os module allows us to use operating system-dependent functionalities.
  2. From pathlib import Path: It is similar to the OS module only difference is in this we create a Path object for a particular file to pass it in function.
  3. Import shutil: Shutil is a high-level module for file operations. On individual files and sets of files, you can carry out operations like copying and removing.

The main difference between the OS module and the Shutil module is that in the OS module, it is necessary that the directory you want to delete should be empty, but this is not the case in shutil module, it can delete the whole directory with its contents.

It is a best practice to first check for the existence of a file or folder before deleting it. After that perform the action to avoid errors. You can check for the file's existence using the following commands:

  • os.path.isfile("/path/to/file")
  • Use exception handling (Try - Except block)
  • os.path.exists

Note: The file might be deleted or altered between the two lines, that's why exception handling is advised rather than checking.

How to Delete a File in Python?

Let's now look at 5 different methods to remove a file from a directory using python:

Method 1) os.remove(file_path)

The os.remove(path) function is used to delete a file from the file system whose path is passed. The path argument is a string that specifies the path of the file that you want to delete. If the file exists, it will permanently remove it. If it doesn't, it throws a FileNotFoundError exception.

Hence, to avoid the error we always prefer to check for file existence.

Example:

import os
from pathlib import Path
import touch
myfile = "favtutor.txt"
Path(myfile).touch() #creating a new empty file
print("Files in a directory -->",os.listdir())
print("We can see a file created succesfully")
print("-----------------------------------------------------")
# If file exists, delete it.
if os.path.isfile(myfile):
    os.remove(myfile)
    print("Favtutor file deleted using remove() function")
    print("Current files in directory -->",os.listdir())
    print("-----------------------------------------------------")
else:
    # If it fails, inform the user.
    print("Error: %s file not found" % myfile)

 

Output:

Files in a directory --> ['demo.txt', 'favtutor.txt', 'jupyter.ipynb', 'SPAM text message 20170820 - Data.csv']
We can see a file created succesfully
-----------------------------------------------------
Favtutor file deleted using remove() function
Current files in directory --> ['demo.txt', 'jupyter.ipynb', 'SPAM text message 20170820 - Data.csv']
-----------------------------------------------------

 

Note that If any files are once deleted using python, They will be deleted permanently. So, be cautious!

Method 2) os.rmdir(directory_path)

The os.rmdir(directory_path) function is used to remove an empty directory from the file system. The "rmdir" means to remove the directory. If the directory specified by directory_path exists and is empty, this function will delete it. If it is not empty, the function will raise an OSError exception with the message "Directory not empty".

Keep in mind that if the directory is the same as your python program you can pass the relative path to it otherwise you have to pass the full path of the directory you want to delete inside the function.

Example:

import pathlib
path="Text_files" # specifiing new folder name

if not os.path.exists(path): # checking for folder existance
    # creating a new folder
    os.makedirs(path) 

# fetching the working directory path
rootdir=os.getcwd() 
#loop to iterate working directory files and subdirectory
for root, dirs, files in os.walk(top=rootdir, topdown=False):
    for name in dirs:
        dir_path=os.path.join(root, name)
        print("Subdirectory",dir_path)
print("We can see a folder created succesfully with name Text_files")
print("-----------------------------------------------------")
#creating a new empty file into a subdirectory
myfile = "favtutor.txt"
new=os.path.join(dir_path,myfile)
Path(new).touch() 
print("Files in a directory -->",os.listdir())

# Try to delete the  empty folder
# checking for folder availaibility using try and except block
try:
    
    os.rmdir(dir_path)
    for root, dirs, files in os.walk(top=rootdir, topdown=False):
        if dirs==[]:
            print("No subdiretectory")
        else:
            print(dirs)
    print("folder deleted succesfully")
    print("-----------------------------------------------------")
except OSError as e:
    
    print("Error: %s - %s." % (e.filename, e.strerror))
    print("-----------------------------------------------------")

 

Output:

Subdirectory f:\projects\Favtutor\Text_files
We can see a folder created succesfully with name Text_files
-----------------------------------------------------
Files in a directory --> ['demo.txt', 'favtutor.txt', 'jupyter.ipynb', 'SPAM text message 20170820 - Data.csv', 'Text_files']
Error: f:\projects\Favtutor\Text_files - The directory is not empty.
-----------------------------------------------------

 

As we have created a new file named “Favtutor” inside our newly created subdirectory, rmdir() function fails to delete the directory, giving us the error stating that the folder is not empty. Now let's try deleting the folder after first deleting the file so that our directory is empty.

try:
    os.remove(new)
    print(new,"Favtutor file deleted using remove() function")
    os.rmdir()
    for root, dirs, files in os.walk(top=rootdir, topdown=False):
        if dirs==[]:
            print("No subdiretectory")
        else:
            print(dirs)
    print("folder deleted succesfully")
    print("-----------------------------------------------------")
except OSError as e:
    
    print("Error: %s - %s." % (e.filename, e.strerror))
    print("-----------------------------------------------------")

 

Output:

f:\projects\Favtutor\Text_files\favtutor.txt Favtutor file deleted using remove() function
No subdiretectory
folder deleted succesfully
-----------------------------------------------------

 

Now, as the directory was empty, rmdir() method deleted the directory successfully.

Method 3) shutil.rmtree(path[, ignore_errors[, onerror]])

The shutil.rmtree(path) function is used to remove a directory and all of its contents, including all subdirectories and files. The ignore_errors is an optional Boolean argument to whether or not to ignore any errors occurred during the deletion process. So, a major drawback is that you cannot delete a single file using it.

As in the above example we faced the issue of the directory not being empty, we can use shutil() method in place of rmdir() to delete the directory completely without any error. The code will have just a few slight changes as below:

Example:

import pathlib
import shutil 
path="Text_files" # specifiing new folder name

if not os.path.exists(path): # checking for folder existance
    # creating a new folder
    os.makedirs(path) 

# fetching the working directory path
rootdir=os.getcwd() 
#loop to iterate working directory files and subdirectory
for root, dirs, files in os.walk(top=rootdir, topdown=False):
    for name in dirs:
        dir_path=os.path.join(root, name)
        print("Subdirectory",dir_path)
print("We can see a folder created succesfully with name Text_files")
print("-----------------------------------------------------")
#creating a new empty file into a subdirectory
myfile = "favtutor.txt"
new=os.path.join(dir_path,myfile)
Path(new).touch() 

print("favtutor.txt file created inside Text_files directory")
print("-----------------------------------------------------")

# Try to delete the  empty folder
# checking for folder availaibility using try and except block
try:
    shutil.rmtree(path)
    for root, dirs, files in os.walk(top=rootdir, topdown=False):
        if dirs==[]:
            print("No subdiretectory")
        else:
            print(dirs)
    print("We can see a folder deleted succesfully")
    print("-----------------------------------------------------")
except OSError as e:
   
    print("Error: %s - %s." % (e.filename, e.strerror))
    print("-----------------------------------------------------")

 

Output:

Subdirectory f:\projects\Favtutor\Text_files
We can see a folder created succesfully with name Text_files
-----------------------------------------------------
favtutor.txt file created inside Text_files directory
-----------------------------------------------------
No subdiretectory
We can see a folder deleted succesfully
-----------------------------------------------------

 

Method 4) pathlib.Path.unlink(missing_ok=False)

The pathlib.Path.unlink() method operates on a Path object that represents the path of the file that you want to delete. If the file specified by the Path object exists, the unlink() method will delete it. If missing_ok parameter is false (default value), FileNotFoundError is raised if the path does not exist. If it is true, FileNotFoundError exceptions will be ignored.

You can check your current working directory with “Path.cwd”.

Example:

import pathlib
import os
path_object = Path(".")
print(type(path_object))
#creating a new empty file into a subdirectory
myfile = "favtutor.txt"
Path(myfile).touch() 
print("favtutor.txt file created")
print(os.listdir())
print("-----------------------------------------------------")
file = pathlib.Path("favtutor.txt")
file.unlink(missing_ok=False)
print(os.listdir())
print("favtutor.txt file deleted")

 

Output:

<class 'pathlib.WindowsPath'>
favtutor.txt file created
['demo.txt', 'favtutor.txt', 'jupyter.ipynb', 'SPAM text message 20170820 - Data.csv']
-----------------------------------------------------
['demo.txt', 'jupyter.ipynb', 'SPAM text message 20170820 - Data.csv']
favtutor.txt file deleted

 

Method 5) pathlib.Path.rmdir()

It helps us to remove an empty directory. You need to first select the Path() for the empty directory, and then call rmdir() method on that path. It will check the folder size. If it's 0 byte i.e. empty, the will be deleted successfully else throws an error. This is a good way to delete empty folders without any fear of losing actual data.

It is similar to os.rmdir() method only way of writing the syntax is different, You can just replace the os.rmdir(dir_path) line with this function.

Path(dir_path).rmdir()

 

Python Problems with Removing Files

Let's now look at some of the common problems you might have with deleting files in python. Here is an Python program to delete all files with specific extensions:

import os 
path="Text_files" # specifiing new folder name
if not os.path.exists(path): # checking for folder existance
    # creating a new folder
    os.makedirs(path) 
files=["python.txt","data.csv","java.txt","house_prediction.xls","C.txt"]
for file in files:
    new=os.path.join(path+"\\"+file)
    # print(new)
    # creating 5 new files inside Text_files folder
    Path(new).touch() 

print("Files in a directory -->",os.listdir(path))
for file_name in os.listdir(path):
    if file_name.endswith('.txt'):
        os.remove(path + "\\"+file_name)
        print("Files deleted-->",path + "\\"+file_name)
print("Files in a directory -->",os.listdir(path))

 

Output:

Files in a directory --> ['C.txt', 'data.csv', 'house_prediction.xls', 'java.txt', 'python.txt']
Files deleted--> Text_files\C.txt
Files deleted--> Text_files\java.txt
Files deleted--> Text_files\python.txt
Files in a directory --> ['data.csv', 'house_prediction.xls']

 

Here is another python Program to Delete a file after reading its contents:

filepath="demo.txt"
f = open(filepath, "r")
print("contents of file")
print(f.read())
print("---------------------------------------------------------------------")
f.close()
os.remove("demo.txt")
print("File deleted succesfully")

 

Output:

contents of file
Education in technology
Though the man had been playing with science since ages, the term technology was conceived in the early 20th century. It is inspired by the German terms Technik and technologie. Though, in German, there is a difference between technik and technologie the English, around the 1930s, combined both and start referring to them as technology.
An American sociologist Read Bain gave the first definition of technology in 1937 in his journal titled Technology and State Government. Bain wrote that all the tools, machinery, equipment, clothes, etc are technology along with the methods we use to produce them.
From time to time technology had been defined by several scientists and engineers; nevertheless, the basic concept has always remained the same. It is a concept created by combining mental and physical effort to obtain a valuable outcome.
Technology has made life easy and convenient. Before modern-day technology, carrying out everyday works was so cumbersome and difficult. It would take a whole day to just travel a couple of miles. Sending messages also wasnt as easy as it is today. With a mobile phone which is a technological product, you can send messages instantly to the receiver on another corner of the world.
A couple of centuries back, it would have taken a couple of days or even weeks. Technology has much evolved making life more easy, convenient and safe than before. Though technology is advantageous, there are also certain disadvantages attributed to it. Today, we depend on technology, so much that it would be impossible to live for a single day in absence of it.
---------------------------------------------------------------------
File deleted succesfully

 

Also, learn how to overwrite a file in python, which is also important to learn.

Conclusion

We have explored various methods to delete files and directories in Python  and also how to check if the files exist or not. We have learned how to delete individual files using the os.remove() function, handle errors using os.path.exists(), and delete empty directories with os.rmdir().

FavTutor - 24x7 Live Coding Help from Expert Tutors!

About The Author
Komal Gupta
I am a driven and ambitious individual who is passionate about programming and technology. I have experience in Java, Python, and machine learning, and I am constantly seeking to improve and expand my knowledge in these areas. I am an AI/ML researcher. I enjoy sharing my technical knowledge as a content writer to help the community.