How to List Files in a Directory in Python
In this tutorial, we are going to learn two different ways of listing files/folders that are inside a directory in Python.
The os Module
The Python os
module has the listdir()
function, which lists all folders and files in the path supplied. Let's try this out on the current working directory (where the Python script is located) by supplying a .
(dot) as the first argument.
import os
cwd = os.listdir('.')
print(cwd)
['fil.txt', 'pandas_white.svg', 'download.py', 'env']
As is shown in the example above, we get a list of all files and folders in the directory.
If you want to get files in a different directory, supply its path, which could be relative to the Python script or a full path.
# up two directories:
os.listdir('../..')
# full path:
os.listdir('/path/to/dir')
Read more about navigating directories using the cd command.
List Files Only
If you only want to list files, not subdirectories, use the following:
files = [f for f in os.listdir('.') if os.path.isfile(f)]
for f in files:
print(f)
file.txt
file2.txt
file3.zip
List all Matching Files with glob
The glob
module has the iglob()
function which can be used to list files in a directory. What makes it powerful is you can use Regular Expressions to match directories and files.
Let's say we wanted to list all the .txt files in the current directory. We could use iglob() like this:
import glob
cwd = list(glob.iglob('./*txt'))
print(cwd)
['./file.txt', './file2.txt']
Recursively Search Directories in Python
We can use the **
comand in the iglob()
function to recursively search directories like this:
import glob
cwd = list(glob.iglob('/Users/john/websites/**/*txt', recursive=True))
print(cwd)
['./file.txt', './file2.txt']
Note – recursive=True
must be supplied for this to work.