Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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.
