Skip to content

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 glob patterns effectively

TL;DR — Quick Recipes

TaskBest Method
List files (non-recursive)os.listdir or pathlib.Path.iterdir()
List files recursivelyos.walk or pathlib.Path.rglob()
Filter by extensionpathlib.Path.rglob("*.csv")
Pattern matchingglob.glob() / pathlib.Path.rglob("*pattern*")
Best overallpathlib

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.listdir for simple directory scans
  • os.walk for recursive traversal
  • Filtering files by extension
  • Handling special file types like images and videos
  • glob for 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")