In this article we will discuss techniques in python to check if a file exists or a link or a directory exists or not.

Python – Check if a path exists

Python’s os module provides a function to check if a given path exists or not i.e.

os.path.exists(path)

It will True if the path exists else it will give False. Parameter path can be a relative or an absolute path.
For example,
pathStr = '/home/varun/temp'

# Check if path exists or not
if os.path.exists(pathStr) :
    print("Path " , pathStr, " exists")
else:
    print("Path " , pathStr, " does not exists")    

Some Points to remember:

  •  In case path is of a symbolic link and link is broken i.e, file it points too doesn’t exists, then it will return False.
  • It can also return False if we don’t have permission to read the entity at given path.

With os.path.exists(path) we can make sure that given path exists or not but we can not make sure if it’s a file or directory or link.

Python – Check if a file exists

Python’s os module provides a function to check if a given file exists or not i.e.

os.path.isfile(path)

It will return True if given path points to a file and that exists.

Why we need to check if a file exists ?

Suppose we want to open a file but if that file doesn’t exists then it will throw error FileNotFoundError at runtime i.e.

FileNotFoundError: [Errno 2] No such file or directory: ‘/home/varun/temp/sample1.csv’

To avoid this kind of error, we should first check if file exists or not. Let’s see how to do that i.e.

fileName = '/home/varun/temp/link.csv'
# Check if given path exists and it is a file
#if os.path.exists(fileName) and os.path.isfile(fileName):
if os.path.isfile(fileName):
    # File exists, so now we can safely open the file    
    fileHandler = open(fileName , "r")
    allData = fileHandler.read()
    fileHandler.close()
    print(allData)
else:
    # File does not exist
    print("File Not Found")

Python – check if a Directory exists

Python’s os module provides a function to check if a given directory exists or not i.e.

os.path.isdir(path)

It will return True if given path points to a directory and that exists.

Example,

dirName = '/home/varun/temp22'

# Check if given path exists and it is a directory
if os.path.isdir(dirName):
    print(dirName ,  ' exists and it is  a Directory' )
else:
    # File does not exist
    print("Directory Not Found")

Both os.path.isdir() & os.path.isfile() returns True in case of symbolic links too (not broken). But we have another API to check separately if given path is a link or not.

Python – check if given path is a link

On the similar lines, Python’s OS module provides a function to check if a given path is a link that exists i.e.

os.path.islink(path)

It will return True if given path points to a link, even if that is broken.

To check if given path is a link and that is not broken i.e. file/dir it points to exists, we need to use exists() along with islink() i.e.

linkPath = '/home/varun/temp/link.csv'
    
# Check if given path is link
if os.path.exists(linkPath) and os.path.islink(linkPath):
    print(linkPath ,  ' is a link and not broken' )
else:
    # File does not exist
    print("link Not Found or broken")    

Complete example is as follows,
import os

def main():
    
    
    
    print("***** Check if a given path exists *****")
    
    pathStr = '/home/varun/temp'
    
    # Check if path exists or not
    if os.path.exists(pathStr) :
        print("Path " , pathStr, " exists")
    else:
        print("Path " , pathStr, " does not exists")    
    
    
    print("***** Check if a file exists *****")
    
    
    fileName = '/home/varun/temp/link.csv'
    # Check if given path exists and it is a file
    #if os.path.exists(fileName) and os.path.isfile(fileName):
    if os.path.isfile(fileName):
        # File exists, so now we can safely open the file    
        fileHandler = open(fileName , "r")
        allData = fileHandler.read()
        fileHandler.close()
        print(allData)
    else:
        # File does not exist
        print("File Not Found")
    
    print("***** Check if a Directory exists *****")
    
    dirName = '/home/varun/temp22'
    
    # Check if given path exists and it is a directory
    if os.path.isdir(dirName):
        print(dirName ,  ' exists and it is  a Directory' )
    else:
        # File does not exist
        print("Directory Not Found")
    
    
    print("***** Check if a link exists *****")
        
    linkPath = '/home/varun/temp/link.csv'
        
    # Check if given path is link
    if os.path.exists(linkPath) and os.path.islink(linkPath):
        print(linkPath ,  ' is a link and not broken' )
    else:
        # File does not exist
        print("link Not Found or broken")    
    
if __name__ == '__main__':
    main()


Output:
***** Check if a given path exists *****
Path  /home/varun/temp  exists
***** Check if a file exists *****
Hello
Hi

***** Check if a Directory exists *****
Directory Not Found
***** Check if a link exists *****
/home/varun/temp/link.csv  is a link and not broken

Join a list of 2000+ Programmers for latest Tips & Tutorials