How to check if a given directory contains any other directory in Python?

In Python, when working with directory structures, it is necessary to check whether a given directory contains any other directories within it. This process is useful when performing batch operations, cleaning up folders, or traversing file systems. Python provides several built-in ways to perform this check effectively.

In this article, we will explore different methods using both os and pathlib modules to determine if a directory contains any subdirectories.

Using os.listdir() and os.path.isdir()

The os.listdir() method lists directory contents, and when combined with os.path.isdir(), we can verify if an item is a directory.

Example

This example uses a generator expression to quickly check if any item is a subdirectory ?

import os
import tempfile

# Create a test directory structure
with tempfile.TemporaryDirectory() as test_dir:
    # Create some subdirectories
    os.makedirs(os.path.join(test_dir, "folder1"))
    os.makedirs(os.path.join(test_dir, "folder2"))
    
    # Create a file
    with open(os.path.join(test_dir, "file.txt"), "w") as f:
        f.write("test")
    
    # Check if any item is a directory
    has_subdirs = any(os.path.isdir(os.path.join(test_dir, item)) for item in os.listdir(test_dir))
    
    # Output result
    print("Contains subdirectories" if has_subdirs else "No subdirectories found")
    print(f"Items in directory: {os.listdir(test_dir)}")
Contains subdirectories
Items in directory: ['folder1', 'folder2', 'file.txt']

Using os.scandir()

The os.scandir() method is a more efficient alternative introduced in Python 3.5. It provides file attributes without additional system calls, making it faster when working with large directories.

Example

This example uses os.scandir() to check for subdirectories more efficiently ?

import os
import tempfile

# Create a test directory structure
with tempfile.TemporaryDirectory() as test_dir:
    # Create some subdirectories and files
    os.makedirs(os.path.join(test_dir, "documents"))
    os.makedirs(os.path.join(test_dir, "images"))
    
    with open(os.path.join(test_dir, "readme.txt"), "w") as f:
        f.write("documentation")
    
    # Use os.scandir for efficient directory scanning
    with os.scandir(test_dir) as entries:
        has_subdirs = any(entry.is_dir() for entry in entries)
    
    # Output result
    print("Contains subdirectories" if has_subdirs else "No subdirectories found")
    
    # Show what was found
    with os.scandir(test_dir) as entries:
        for entry in entries:
            print(f"{entry.name}: {'Directory' if entry.is_dir() else 'File'}")
Contains subdirectories
documents: Directory
images: Directory
readme.txt: File

Using pathlib.Path.iterdir()

The pathlib module provides an object-oriented interface to filesystem paths. The Path.iterdir() method allows iteration over directory contents and checking for directories using the .is_dir() method.

Example

This example shows how to use pathlib for modern, object-oriented directory checking ?

from pathlib import Path
import tempfile

# Create a test directory structure
with tempfile.TemporaryDirectory() as temp_dir:
    directory = Path(temp_dir)
    
    # Create subdirectories and files
    (directory / "projects").mkdir()
    (directory / "archives").mkdir()
    (directory / "config.json").write_text('{"version": "1.0"}')
    
    # Check if the directory has subdirectories
    has_subdirs = any(item.is_dir() for item in directory.iterdir())
    
    # Output result
    print("Contains subdirectories" if has_subdirs else "No subdirectories found")
    
    # List all items with their types
    for item in directory.iterdir():
        print(f"{item.name}: {'Directory' if item.is_dir() else 'File'}")
Contains subdirectories
projects: Directory
archives: Directory
config.json: File

Performance Comparison

Method Python Version Performance Best For
os.listdir() + os.path.isdir() All versions Slower Simple cases, older Python
os.scandir() 3.5+ Faster Large directories, performance-critical
pathlib.Path.iterdir() 3.4+ Good Modern code, object-oriented approach

Conclusion

Use os.scandir() for the best performance when checking large directories. Use pathlib for modern, readable code with object-oriented file handling. The os.listdir() approach works well for simple cases and older Python versions.

Updated on: 2026-03-24T18:28:14+05:30

5K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements