Find all files in a directory with a given extension using Python

David Y.
jump to solution

The Problem

Using Python, how can I find all the files in a directory that have a certain extension, e.g. .txt?

The Solution

There are two ways to do this, depending on whether or not we want to search through subdirectories. To get all the files with a given file extension in the current directory, ignoring subdirectories, we can use glob.glob():

import glob, os

os.chdir("/directory_to_search") # move to the search directory

txt_files = [f for f in glob.glob("*.txt")] # will produce a list of .txt files

If we want to search subdirectories as well, we must use os.walk(). This function returns a generator iterator that can be used in a for loop to methodically traverse a filesystem tree, starting at a given path. For each level of the tree, os.walk() will return a three-value tuple, containing:

  • The name of the current directory.
  • A list of subdirectory names in the current directory.
  • A list of file names in the current directory.

By looping through the output of os.walk(), we can check each file within the top-level subdirectory and add it to our list if it ends in .txt:

import os

txt_files = []
for root, dirs, files in os.walk("/directory_to_search"):
    for file in files:
        if file.endswith(".txt"):
            txt_files.append(os.path.join(root, file))
Lowercase a string in Python
David Y.
Check for NaN values in Python
David Y.

Considered "not bad" by 4 million developers and more than 150,000 organizations worldwide, Sentry provides code-level observability to many of the world's best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.

Sentry