DEV Community

Srinivas for ItsMyCode

Posted on • Originally published at itsmycode.com on

Python – List Files in a Directory

ItsMyCode |

There are several modules available in Python to list files in a directory or folder. Some of the popular ones we can use are os, pathlib, glob, fnmatch , etc. This tutorial will look at the most popular way to list all the files in a directory.

Method 1: Using os.listdir() method

We can use os.listdir() to get all the files and directories in the specified path.

Syntax – os.listdir(path)

It takes a path as a parameter and returns a list of all files and directories in a specified path.

# import OS module
import os

# List all the files and directories
path = "C:\Projects\Tryouts"
dir_list = os.listdir(path)

print("Files and directories in '", path, "' :")

# prints all files
print(dir_list)

Enter fullscreen mode Exit fullscreen mode

Output

Files and directories in ' C:\Projects\Tryouts ' :
['calc.py', 'etc', 'listindexerror.py', 'main.py', 'Python Tutorial.py', 'Python Tutorial.txt', 'test', 'test - Copy', ' __pycache__']
Enter fullscreen mode Exit fullscreen mode

Method 2: Using os.walk() method

The os module provides many functions to interact with operating system features, and one such method is os.walk(), which generates the files and folders in a directory tree. It can traverse the tree either top-down or bottom-up search, and by default, it sets as top-down search.

The os.walk() also helps to retrieve the files and folder in the absolute path.

# import OS module
import os

# List all the files and directories
path = "C:\Projects\Tryouts"
for (root, directories, files) in os.walk(path, topdown=False):
    for name in files:
        print(os.path.join(root, name))
    for name in directories:
        print(os.path.join(root, name))
Enter fullscreen mode Exit fullscreen mode

Output

C:\Projects\Tryouts\etc\password.txt
C:\Projects\Tryouts\test\python.txt
C:\Projects\Tryouts\test - Copy\python.txt
C:\Projects\Tryouts\ __pycache__ \calc.cpython-39.pyc
C:\Projects\Tryouts\calc.py
C:\Projects\Tryouts\listindexerror.py
C:\Projects\Tryouts\main.py
C:\Projects\Tryouts\Python Tutorial.py
C:\Projects\Tryouts\Python Tutorial.txt
C:\Projects\Tryouts\etc
C:\Projects\Tryouts\test
C:\Projects\Tryouts\test - Copy
C:\Projects\Tryouts\ __pycache__
Enter fullscreen mode Exit fullscreen mode

Method 3: Using os.scan() method

os.scan() method is available in Python 3.5 and above. scandir() accepts either a bytes or str object for the path parameter and returns the DirEntry.name and DirEntry.path attributes with the same type as the path.

Syntax: os.scandir(path = ‘.’)

# import OS module
import os

# List all the files and directories
path = "C:\Projects\Tryouts"
data = os.scandir()

for item in data:
    if item.is_dir() or item.is_file():
        print(item.name)
Enter fullscreen mode Exit fullscreen mode

Output

calc.py
etc
listindexerror.py
main.py
Python Tutorial.py
Python Tutorial.txt
test
test - Copy
__pycache__
Enter fullscreen mode Exit fullscreen mode

Method 4: Using glob module

The glob module helps you retrieve the files/path matching a specified pattern as the glob supports the wildcard search. We can get both files and folders using the glob module.

# import OS module
import glob

# List all the files and directories
path = "C:\Projects\Tryouts\*"

for file_name in glob.iglob(path, recursive=True):
  print(file_name)

C:\Projects\Tryouts\calc.py
C:\Projects\Tryouts\etc
C:\Projects\Tryouts\listindexerror.py  
C:\Projects\Tryouts\main.py
C:\Projects\Tryouts\Python Tutorial.py 
C:\Projects\Tryouts\Python Tutorial.txt
C:\Projects\Tryouts\test
C:\Projects\Tryouts\test - Copy
C:\Projects\Tryouts\ __pycache__
Enter fullscreen mode Exit fullscreen mode

We can also print the filenames recursively using the iglob()method. All you need to do is set the recursive parameter as true.

Below the example, we use iglob() method with recursive set to true and searching with a specific pattern to get all the .py files

# import OS module
import glob

# List all the files and directories
path = "C:\Projects\Tryouts\*.py"

for file_name in glob.iglob(path, recursive=True):
  print(file_name)
Enter fullscreen mode Exit fullscreen mode

Output

C:\Projects\Tryouts\calc.py
C:\Projects\Tryouts\listindexerror.py 
C:\Projects\Tryouts\main.py
C:\Projects\Tryouts\Python Tutorial.py
Enter fullscreen mode Exit fullscreen mode

The post Python – List Files in a Directory appeared first on ItsMyCode.

Discussion (2)

Collapse
brandonwallace profile image
brandon_wallace

Nice article!

There is also the pathlib module.

from pathlib import Path

file_path = Path('.').cwd()

for file in file_path.iterdir():
    print(file)
Enter fullscreen mode Exit fullscreen mode
Collapse
srinivasr profile image
Srinivas Author

Thanks for the feedback. I will add this techinque into the post