How to get a list of all sub-directories in the current directory using Python?

In Python, when working with files and directories, we often need to get a list of subdirectories within a specific location, especially the current working directory. Python provides several methods to accomplish this task efficiently.

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

The os module provides a straightforward approach to interact with the operating system. We can combine os.listdir() with os.path.isdir() to filter only directories ?

Example

import os

# List all sub-directories in the current directory
subdirectories = [item for item in os.listdir('.') if os.path.isdir(item)]

print("Sub-directories in current directory:")
print(subdirectories)
Sub-directories in current directory:
['documents', 'images', 'scripts']

Using pathlib Module

Python's pathlib module, introduced in Python 3.4, provides an object-oriented approach to handling filesystem paths. It offers a more modern and readable way to work with directories ?

Example

from pathlib import Path

# Get the current directory as a Path object
current_dir = Path('.')

# List all sub-directories
subdirectories = [item.name for item in current_dir.iterdir() if item.is_dir()]

print("Sub-directories in current directory:")
print(subdirectories)
Sub-directories in current directory:
['documents', 'images', 'scripts']

Using os.walk() for First Level Only

The os.walk() method can also be used to get subdirectories. By using next(), we can get only the first level directories ?

Example

import os

# Get only first-level subdirectories using os.walk()
_, subdirectories, _ = next(os.walk('.'))

print("Sub-directories in current directory:")
print(subdirectories)
Sub-directories in current directory:
['documents', 'images', 'scripts']

Using glob Module

The glob module provides pattern matching for filenames. We can use it with the */ pattern to match directories ?

Example

import glob
import os

# Use glob to find directories
subdirectories = [os.path.basename(path) for path in glob.glob('./*/')]

print("Sub-directories in current directory:")
print(subdirectories)
Sub-directories in current directory:
['documents', 'images', 'scripts']

Comparison of Methods

Method Python Version Performance Readability
os.listdir() All versions Fast Good
pathlib 3.4+ Fast Excellent
os.walk() All versions Moderate Good
glob All versions Moderate Good

Conclusion

For modern Python applications, use pathlib for its clean syntax and object-oriented approach. For compatibility with older Python versions, os.listdir() combined with os.path.isdir() remains the most reliable method.

Updated on: 2026-03-24T18:25:31+05:30

13K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements