NotADirectoryError: Errno 20 Not a directory (Fix)
NotADirectoryError: [Errno 20] Not a directory happens when Python expects a folder path, but your code gives it a file path instead.
This usually appears with functions like os.listdir(), os.chdir(), and os.scandir(). These functions work with directories, not files.
Quick fix
Use os.path.isdir() before calling a function that expects a directory:
import os
path = "notes.txt"
if os.path.isdir(path):
print(os.listdir(path))
else:
print("This path is not a directory:", path)
What this does:
- Checks whether
pathis a directory - Only calls
os.listdir()if the path is a folder - Avoids the error when the path points to a file
If you need help understanding path types, see working with file paths in Python.
What this error means
This error means:
- Python expected a directory path
- You gave a file path or another non-directory path instead
- A function like
os.listdir()oros.chdir()cannot continue
In simple terms:
"documents/"is usually a directory path"notes.txt"is usually a file path
If a function needs a folder, passing "notes.txt" will cause this error.
Why it happens
Common reasons include:
- A filename is passed to a function that needs a folder
- Part of the path points to a file, not a directory
- A variable name suggests a folder, but actually stores a file path
- The path was built incorrectly
This is especially common when:
- You are joining paths by hand
- You are using user input
- You assume a path is a folder without checking it first
Example that causes the error
Suppose notes.txt is a real file in your current folder.
import os
print(os.listdir("notes.txt"))
Output:
Traceback (most recent call last):
...
NotADirectoryError: [Errno 20] Not a directory: 'notes.txt'
Why this fails
os.listdir() lists the contents of a directory.
It can do this:
import os
print(os.listdir("documents"))
But it cannot do this:
import os
print(os.listdir("notes.txt"))
Because notes.txt is a file, not a folder.
If you want to learn more about this function, see os.listdir() explained.
How to fix it
There are several ways to fix this error.
Pass the correct folder path
If you meant to list a folder, pass the folder path:
import os
folder_path = "documents"
print(os.listdir(folder_path))
Check the path before using it
import os
path = "notes.txt"
if os.path.isdir(path):
print(os.listdir(path))
else:
print("Expected a directory, but got:", path)
This is one of the safest beginner-friendly fixes.
You can also use os.path.exists() explained to check whether the path exists at all.
Use open() for files and os.listdir() for folders
If your path is a file, use open() instead of os.listdir():
path = "notes.txt"
with open(path, "r") as file:
content = file.read()
print(content)
Use:
open()for filesos.listdir()for folders
If needed, read more about the Python open() function.
Print the path value
A very common problem is that the variable contains something different from what you expected.
import os
path = "notes.txt"
print("Path value:", path)
if os.path.isdir(path):
print(os.listdir(path))
else:
print("Not a directory")
Printing the path often helps you spot:
- wrong filenames
- missing folder names
- incorrect path building
- unexpected user input
File path vs directory path
Understanding this difference helps prevent the error.
File path
A file path points to one file:
"data.txt"
"images/photo.jpg"
You usually use file paths with functions like:
open()os.path.isfile()
Directory path
A directory path points to a folder:
"documents"
"images"
"projects/python"
You usually use directory paths with functions like:
os.listdir()os.chdir()os.scandir()
Different Python functions expect different path types. If you mix them up, errors happen.
Beginner debugging steps
If you get this error, check these things in order.
1. Print the path
print(path)
Make sure the value is really what you think it is.
2. Check whether the path exists
import os
print(os.path.exists(path))
If it returns False, the path is wrong or missing.
3. Check whether it is a file or directory
import os
print(os.path.isfile(path))
print(os.path.isdir(path))
This tells you what the path actually points to.
4. Check your current working directory
Sometimes the path is relative, and Python is looking in a different place than you expect.
import os
print(os.getcwd())
5. Make sure you are using the right function
- If the path is a file, use
open() - If the path is a folder, use
os.listdir()or another directory function
If you need a full overview of these tools, see the Python os module overview.
Common places this appears
You will often see this error in code like:
os.listdir(path)os.chdir(path)os.scandir(path)- Any code that expects a folder but receives a file path
For example, this will also fail if report.txt is a file:
import os
os.chdir("report.txt")
And this can fail when part of the path is a file:
import os
path = "notes.txt/archive"
print(os.listdir(path))
If notes.txt is a file, Python cannot treat it like a folder containing archive.
Common mistakes
Common causes of NotADirectoryError include:
- Calling
os.listdir()on a file - Calling
os.chdir()with a filename - Joining paths incorrectly
- Confusing a file path variable with a folder path variable
- Using user input without checking whether it is a directory
Useful debugging commands:
print(path)
import os
print(os.path.exists(path))
print(os.path.isfile(path))
print(os.path.isdir(path))
print(os.getcwd())
FAQ
What is the difference between NotADirectoryError and FileNotFoundError?
NotADirectoryError means the path exists, but it is not a folder.
FileNotFoundError means the path does not exist.
For that related case, see FileNotFoundError: Errno 2 No such file or directory.
Can a file path cause NotADirectoryError?
Yes. If a function expects a directory and you pass a file path, Python raises this error.
How do I check if a path is a directory?
Use os.path.isdir(path).
Example:
import os
path = "documents"
print(os.path.isdir(path))
It returns:
Trueif the path is a directoryFalseotherwise
Should I use open() or os.listdir()?
Use:
open()for filesos.listdir()for folders
Using the wrong one can cause errors like this one or the related IsADirectoryError: Errno 21 Is a directory.