How to List Files in a Directory in Python

If you want to list files in a folder in Python, there are two common beginner-friendly options:

  • os.listdir() for a simple list of names
  • pathlib for cleaner path handling

This page shows how to:

  • List everything inside a directory
  • Show only files, not subdirectories
  • Print file names or full file paths
  • Use beginner-friendly methods first

Quick answer #

from pathlib import Path

folder = Path(".")
for item in folder.iterdir():
    if item.is_file():
        print(item.name)

This prints file names in the current directory and skips subdirectories.

What this page helps you do #

  • List everything inside a directory
  • Show only files, not subdirectories
  • Print file names or full file paths
  • Use beginner-friendly methods first

Simplest way: use os.listdir() #

The os.listdir() function returns the names of items inside a folder.

That means the result can include:

  • Files
  • Subdirectories

If you use ".", Python looks at the current working directory.

import os

for name in os.listdir("."):
    print(name)

Example output #

notes.txt
photo.jpg
data
script.py

Here:

  • notes.txt, photo.jpg, and script.py are files
  • data might be a folder

So os.listdir() is useful when you want to see everything in a directory, but it does not automatically separate files from folders.

current directory/notes.txtphoto.jpgdata/script.py
What os.listdir(".") sees: files and the data subfolder mixed together

If you want to understand this function in more detail, see os.listdir() explained.

How to list only files #

If you only want files, you need to check each item.

A common way is to use:

  • os.listdir() to get names
  • os.path.join() to build the full path
  • os.path.isfile() to test whether the item is a file
import os

folder = "."

for name in os.listdir(folder):
    full_path = os.path.join(folder, name)
    if os.path.isfile(full_path):
        print(name)

Why use os.path.join()? #

os.listdir() gives you only the item name, such as:

"notes.txt"

But os.path.isfile() usually needs the full path to check the correct item:

"./notes.txt"

That is why this line matters:

full_path = os.path.join(folder, name)

It combines the folder and file name safely.

If you are not familiar with this, see how os.path.join() works.

Beginner-friendly modern option: pathlib #

Many beginners find pathlib easier to read because it treats paths as objects.

You can create a Path object for a folder, loop through its contents, and check whether each item is a file.

from pathlib import Path

folder = Path(".")

for item in folder.iterdir():
    if item.is_file():
        print(item.name)

What this does #

  • Path(".") means the current directory
  • folder.iterdir() loops through everything inside that directory
  • item.is_file() keeps only files
  • item.name prints just the file name

If you want the path instead of just the name, print the Path object itself:

from pathlib import Path

folder = Path(".")

for item in folder.iterdir():
    if item.is_file():
        print(item)

You can also print the absolute path:

from pathlib import Path

folder = Path(".")

for item in folder.iterdir():
    if item.is_file():
        print(item.resolve())
  • item.name → file name only
  • item or str(item) → relative path
  • item.resolve() → full absolute path

For a broader introduction, see working with file paths in Python.

How to include full paths #

Sometimes you need the complete file path, not just the file name.

This is common before you:

  • Open a file
  • Delete a file
  • Check whether a file exists
  • Pass the path to another function

Full paths with os #

import os

folder = "my_folder"

for name in os.listdir(folder):
    full_path = os.path.join(folder, name)
    if os.path.isfile(full_path):
        print(full_path)

This prints paths like:

my_folder/report.txt
my_folder/data.csv

Full paths with pathlib #

from pathlib import Path

folder = Path("my_folder")

for item in folder.iterdir():
    if item.is_file():
        print(item)

If you need the absolute path:

from pathlib import Path

folder = Path("my_folder")

for item in folder.iterdir():
    if item.is_file():
        print(item.resolve())

After listing files, you may want to check whether a file exists in Python or read a file in Python.

Common problems beginners hit #

A few common mistakes can make directory listing confusing.

Using a path that does not exist #

If the folder name is wrong, Python cannot list its contents.

import os

print(os.path.exists("your_folder"))

If this prints False, the path is wrong or Python is looking in a different location than you expected.

If you get an error, see how to fix FileNotFoundError: [Errno 2] No such file or directory.

Forgetting that listdir() includes directories too #

This code prints everything:

import os

for name in os.listdir("."):
    print(name)

If you expected only files, you must filter with os.path.isfile() or item.is_file().

Using only the file name when a full path is required #

This often causes problems when the file is not in the current directory.

Wrong idea:

import os

folder = "my_folder"

for name in os.listdir(folder):
    if os.path.isfile(name):
        print(name)

Better:

import os

folder = "my_folder"

for name in os.listdir(folder):
    full_path = os.path.join(folder, name)
    if os.path.isfile(full_path):
        print(full_path)

Confusing the current working directory with the script location #

When you use ".", Python uses the current working directory, not always the folder where your script is saved.

This command helps you check where Python is looking:

import os
print(os.getcwd())

You can also check with pathlib:

from pathlib import Path
print(Path(".").resolve())

Permission problems #

Sometimes the folder exists, but Python is not allowed to read it. In that case, you may see a permission error.

See how to fix PermissionError: [Errno 13] Permission denied.

FAQ #

How do I list only files and not folders in Python? #

Filter each item with os.path.isfile() or use pathlib and check item.is_file().

What is the easiest way to list files in a directory? #

For beginners, pathlib is often the clearest option. os.listdir() is also common and simple.

Why does my code show folders too? #

Functions like os.listdir() return all items in the directory, including subdirectories.

How do I get full file paths instead of names? #

Use os.path.join(folder, name) with os, or print the Path object in pathlib.

Why can Python not find the folder I gave it? #

You may be using a relative path and your current working directory is different from what you expected.

See also #

Press Esc to close