How to Check if a Directory Exists in Python

Updated on May 15, 2026
Table of Contents
    The Solution

    To check if a directory exists in Python, use `os.path.isdir()` or `pathlib.Path().is_dir()`.

    The Concept

    In Python, checking if a directory exists can be efficiently done using either the os module or the pathlib module. The os.path.isdir() function checks if a given path is a directory, while pathlib.Path().is_dir() provides an object-oriented approach to achieve the same.

    Deep Technical Dive & Misconceptions

    The os module provides two primary methods for checking paths: os.path.exists() and os.path.isdir(). The former checks for the existence of a path, regardless of whether it's a file or directory, while the latter specifically checks for directories. Meanwhile, the pathlib module, introduced in Python 3.4, offers a more modern, object-oriented way to handle filesystem paths with methods like Path.exists() and Path.is_dir().

    A common misconception is that os.path.exists() is sufficient for checking directories. While it does confirm the existence of a path, it does not differentiate between files and directories, which is where os.path.isdir() or Path.is_dir() become essential.

    Common Misconceptions

    • Misconception: os.path.exists() is enough to check for directories. Truth: It checks for any path, not specifically directories.
    • Misconception: os.path.isdir() does not follow symbolic links. Truth: It does follow symbolic links pointing to directories.

    Code Examples

    import os
    
    directory_path = 'instantanswerlab_folder'
    
    # Check if directory exists
    if os.path.isdir(directory_path):
        print(f"{directory_path} exists.")
    else:
        print(f"{directory_path} does not exist.")
    from pathlib import Path
    
    path = Path('instantanswerlab_folder')
    
    # Check if directory exists
    if path.is_dir():
        print(f"{path} exists.")
    else:
        print(f"{path} does not exist.")
    import os
    
    def create_directory_if_not_exists(dir_name):
        if not os.path.isdir(dir_name):
            os.mkdir(dir_name)
            print(f"{dir_name} created.")
        else:
            print(f"{dir_name} already exists.")
    
    create_directory_if_not_exists('instantanswerlab_folder')
    from pathlib import Path
    
    path = Path('instantanswerlab_folder')
    
    # Create directory if it doesn't exist
    path.mkdir(parents=True, exist_ok=True)
    print(f"{path} is ready.")
    import os
    
    # Check if a path is a directory or a file
    path = 'instantanswerlab_folder'
    
    if os.path.exists(path):
        if os.path.isdir(path):
            print(f"{path} is a directory.")
        else:
            print(f"{path} is a file.")
    else:
        print(f"{path} does not exist.")

    Comparison Table

    Method Checks For Module
    os.path.isdir() Directory os
    os.path.exists() File or Directory os
    pathlib.Path().is_dir() Directory pathlib
    pathlib.Path().exists() File or Directory pathlib

    Frequently Asked Questions

    What is the difference between os.path.exists() and os.path.isdir()?

    os.path.exists() checks if a path exists, regardless of whether it's a file or directory, while os.path.isdir() specifically checks if the path is a directory.

    Can pathlib handle both files and directories?

    Yes, pathlib can handle both files and directories using methods like Path.exists() and Path.is_dir().

    How can I create a directory if it doesn't exist?

    You can use os.mkdir() or pathlib.Path().mkdir() with exist_ok=True to create a directory if it doesn't already exist.

    Does os.path.isdir() follow symbolic links?

    Yes, os.path.isdir() follows symbolic links that point to directories.

    Is pathlib available in Python 2?

    Pathlib is available in Python 3.4 and later. For Python 2.7, you can use the pathlib2 module from PyPi.

    Was this solution helpful?
    Report Broken Code or Error

    Help us improve. Paste the error you got or explain what went wrong.

    Thanks! We will review and fix this.

    Related Questions

    Comments & Discussions

    Log in or Sign up to join the discussion.