Python Get All Files in a Directory: The Complete & Efficient Guide
Updated on
Listing files in a directory is one of the most common tasks in Python—whether you're organizing data, preprocessing files, or automating workflows.
In this updated guide, you'll learn:
- How to list files using
os.listdir - How to list files recursively with
os.walk - How to filter files by extension
- How to list images, videos, or specific file types
- The modern way: doing all of this with pathlib, the recommended approach today
- How to use
globpatterns effectively
TL;DR — Quick Recipes
| Task | Best Method |
|---|---|
| List files (non-recursive) | os.listdir or pathlib.Path.iterdir() |
| List files recursively | os.walk or pathlib.Path.rglob() |
| Filter by extension | pathlib.Path.rglob("*.csv") |
| Pattern matching | glob.glob() / pathlib.Path.rglob("*pattern*") |
| Best overall | pathlib |
1. Using os.listdir (Basic, Non-Recursive)
The os.listdir function returns file and folder names inside a directory — but does not go into subfolders.
import os
def list_files(directory):
return os.listdir(directory)
print(list_files("/path/to/your/directory"))This gives you all entries in the directory, but you won’t be able to filter or recurse without extra logic. For most modern Python code, consider pathlib (next sections), but this is still useful for quick scripts.
2. Recursively Listing All Files with os.walk
To walk through all subdirectories and list all files:
import os
def list_files_recursively(directory):
for root, dirs, files in os.walk(directory):
for file in files:
print(os.path.join(root, file))
list_files_recursively("/path/to/your/directory")os.walk is powerful and memory-efficient, making it great for large directory trees.
3. Filtering Files by Extension
You can filter during the walk:
import os
def list_files_by_extension(directory, extension):
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith(extension):
print(os.path.join(root, file))
list_files_by_extension("/path/to/your/directory", ".json")Use (".jpg", ".png") for multiple extensions.
4. Listing Image or Video Files
List images:
import os
def list_image_files(directory):
image_ext = (".jpg", ".jpeg", ".png", ".gif", ".webp")
for root, dirs, files in os.walk(directory):
for file in files:
if file.lower().endswith(image_ext):
print(os.path.join(root, file))
list_image_files("/path/to/your/directory")List videos:
import os
def list_video_files(directory):
video_ext = (".mp4", ".avi", ".mov", ".mkv")
for root, dirs, files in os.walk(directory):
for file in files:
if file.lower().endswith(video_ext):
print(os.path.join(root, file))
list_video_files("/path/to/your/directory")⭐ NEW: The Modern Way — Using pathlib (Recommended)
Since Python 3.4+, pathlib is the preferred way to work with paths.
It is more readable and powerful than os.path.
List all files (non-recursive):
from pathlib import Path
def list_files(directory):
return [p for p in Path(directory).iterdir() if p.is_file()]
print(list_files("/path/to/dir"))Recursively list all files:
from pathlib import Path
def list_files_recursive(directory):
return list(Path(directory).rglob("*"))
print(list_files_recursive("/path/to/dir"))Filter by extension:
from pathlib import Path
for file in Path("/path/to/dir").rglob("*.json"):
print(file)Filter multiple types:
from pathlib import Path
extensions = ("*.jpg", "*.png", "*.jpeg")
for ext in extensions:
for file in Path("path/to/dir").rglob(ext):
print(file)Pathlib makes this extremely clean.
5. Pattern Matching with glob
glob is perfect when you need shell-style wildcard matching:
import glob
json_files = glob.glob("/path/to/your/directory/**/*.json", recursive=True)
print(json_files)Useful patterns:
"*.csv""data_*""**/*.jpg"(recursive)
Conclusion
In this guide, you learned multiple ways to list files in Python:
os.listdirfor simple directory scansos.walkfor recursive traversal- Filtering files by extension
- Handling special file types like images and videos
globfor wildcard searching- pathlib — the modern, recommended approach
Whether you're cleaning data, building file automation scripts, or working in machine learning workflows, these techniques will help you write cleaner, faster, and more maintainable Python code.
FAQs
How do I list all files in a directory using Python?
Use:
os.listdir(path)or the modern option:
Path(path).iterdir()How do I list all files recursively?
Use:
os.walk(path)or:
Path(path).rglob("*")How do I filter files by extension?
Use:
file.endswith(".json")or:
Path(path).rglob("*.json")