- Python FileNotFoundError: [Errno 2] No such file or directory
- Error from open() function
- Error from os.listdir() function
- Conclusion
- Take your skills to the next level ⚡️
- About
- Search
- Python path no such file or directory
- # FileNotFoundError: [Errno 2] No such file or directory
- # Move the file to the same directory as your Python script
- # Specifying an absolute path to the file
- # Make sure to use a raw string if the path contains backslashes
- # Using a relative path to open the file
- # Checking if the specified file exists before opening it
- # Creating a file with the specified name if it doesn’t exist
- # Make sure you have specified the correct filename
- # Changing to the directory that contains the file
- # Things to node when debugging
Python FileNotFoundError: [Errno 2] No such file or directory
This error can come from calling the open() function or the os module functions that deal with files and directories.
To fix this error, you need to specify the correct path to an existing file.
Let’s see real-world examples that trigger this error and how to fix them.
Error from open() function
Suppose you use Python to open and read a file named output.txt as follows:
Python will look for the output.txt file in the current directory where the code is executed.
If not found, then Python responds with the following error:
If the file exists but in a different directory, then you need to specify the correct path to that file.
Maybe the output.txt file exists in a subdirectory like this:
To access the file, you need to specify the directory as follows:
This way, Python will look for the output.txt file inside the logs folder.
Sometimes, you might also have a file located in a sibling directory of the script location as follows:
In this case, the script.py file is located inside the code folder, and the output.txt file is located inside the logs folder.
To access output.txt , you need to go up one level from as follows:
The path ../ tells Python to go up one level from the working directory (where the script is executed)
This way, Python will be able to access the logs directory, which is a sibling of the code directory.
Alternatively, you can also specify the absolute path to the file instead of a relative path.
The absolute path shows the full path to your file from the root directory of your system. It should look something like this:
Pass the absolute path and the file name as an argument to your open() function:
You can add a try/except statement to let Python create the file when it doesn’t exist.
The code above will try to open and read the output.txt file.
When the file is not found, it will create a new file with the same name and write some strings into it.
Also, make sure that the filename or the path is not misspelled or mistyped, as this is a common cause of this error as well.
Error from os.listdir() function
You can also have this error when using a function from the os module that deals with files and directories.
For example, the os.listdir() is used to get a list of all the files and directories in a given directory.
It takes one argument, which is the path of the directory you want to scan:
The above code tries to access the assets directory and retrieve the names of all files and directories in that directory.
If the assets directory doesn’t exist, Python responds with an error:
The solution for this error is the same. You need to specify the correct path to an existing directory.
If the directory exists on your system but empty, then Python won’t raise this error. It will return an empty list instead.
Also, make sure that your Python interpreter has the necessary permission to open the file. Otherwise, you will see a PermissionError message.
Conclusion
Python shows the FileNotFoundError: [Errno 2] No such file or directory message when it can’t find the file or directory you specified.
To solve this error, make sure you the file exists and the path is correct.
Alternatively, you can also use the try/except block to let Python handle the error without stopping the code execution.
Take your skills to the next level ⚡️
I’m sending out an occasional email with the latest tutorials on programming, web development, and statistics. Drop your email in the box below and I’ll send new stuff straight into your inbox!
About
Hello! This website is dedicated to help you learn tech and data science skills with its step-by-step, beginner-friendly tutorials.
Learn statistics, JavaScript and other programming languages using clear examples written for people.
Search
Type the keyword below and hit enter
Python path no such file or directory
Last updated: Feb 17, 2023
Reading time · 7 min
# FileNotFoundError: [Errno 2] No such file or directory
The most common causes of the «FileNotFoundError: [Errno 2] No such file or directory» error are:
- Trying to open a file that doesn’t exist in the specified location.
- Misspelling the name of the file or a path component.
- Forgetting to specify the extension of the file. Note that Windows doesn’t display file extensions.
To solve the error, move the file to the directory where the Python script is located if using a local path, or use an absolute path.
Here is an example of how the error occurs.
Copied!# ⛔️ FileNotFoundError: [Errno 2] No such file or directory: 'example-file.txt' with open('example-file.txt', 'r', encoding='utf-8') as f: lines = f.readlines() print(lines)
We tried to open a file called example-file.txt and it wasn’t found in the specified directory.
This is a relative path, so Python looks for example-file.txt in the same directory as the Python script ( main.py ) in the example.
Copied!# 👇️ relative path (the file has to be in the same directory) example.txt # 👇️ absolute path (Windows) 'C:\Users\Alice\Desktop\my-file.txt' # 👇️ absolute path (macOS or Linux) '/home/alice/Desktop/my-file.txt'
An absolute path is a complete path that points to the file (including the extension).
Note that Windows doesn’t display file extensions.
# Move the file to the same directory as your Python script
One way to solve the error is to move the file to the same directory as the Python script.
You can use the following 3 lines to print the current working directory (of your Python script) if you don’t know it.
Copied!import os current_directory = os.getcwd() # 👇️ /home/borislav/Desktop/bobbyhadz_python print(current_directory)
For example, if you have a Python script called main.py , you would move the example.txt file right next to the main.py file.
Copied!with open('example.txt', 'r', encoding='utf-8') as f: lines = f.readlines() print(lines)
The code sample assumes that you have an example.txt file in the same directory as the main.py file.
# Specifying an absolute path to the file
Alternatively, you can specify an absolute path to the file in the call to the open() function.
An absolute file that points to the file might look something like the following (depending on your operating system).
Copied!# 👇️ on macOS or Linux my_str = r'/home/alice/Desktop/my-file.txt' # 👇️ on Windows my_str_2 = r'C:\Users\Alice\Desktop\my-file.txt'
Here is a complete example that uses an absolute path to open a file.
Copied!absolute_path = r'/home/borislav/Desktop/bobbyhadz_python/example.txt' with open(absolute_path, 'r', encoding='utf-8') as f: lines = f.readlines() print(lines)
Make sure to specify the entire path to the file, including the extension.
On most operating systems, you can find the absolute path to a file by:
The path that is shown will likely not include the name of the file, but will point to the directory that contains the file.
Make sure to specify the name of the file and the extension at the end.
You can also open the file in finder and look at the path.
# Make sure to use a raw string if the path contains backslashes
If your path contains backslashes, e.g. ‘C:\Users\Alice\Desktop\my-file.txt’ , prefix the string with r to mark it as a raw string.
Copied!my_path = r'C:\Users\Alice\Desktop\my-file.txt'
Backslashes are used as escape characters (e.g. \n or \t ) in Python, so by prefixing the string with an r , we treat backslashes as literal characters.
# Using a relative path to open the file
You can also use a relative path, even if the file is not located in the same directory as your Python script.
Assuming that you have the following folder structure.
Copied!my_project/ main.py nested_folder/ example.txt
You can open the example.txt file from your main.py script as follows.
Copied!with open(r'nested_dir/example.txt', 'r', encoding='utf-8') as f: lines = f.readlines() print(lines)
We first navigate to the nested_dir directory and then open the file.
If your file is located one or more directories up you have to prefix the path with ../ .
For example, assume that you have the following folder structure.
Copied!Desktop/ my_project/ main.py example.txt
To open the example.txt file, navigate one directory up.
Copied!with open(r'../example.txt', 'r', encoding='utf-8') as f: lines = f.readlines() print(lines)
The same syntax can be used to open a file that is located two directories up, e.g. ../../example.txt .
# Checking if the specified file exists before opening it
You can use the os module to print the current working directory and its contents.
Copied!import os current_directory = os.getcwd() # 👇️ /home/borislav/Desktop/bobbyhadz_python print(current_directory) contents = os.listdir(current_directory) print(contents) # 👉️ ['main.py', 'example.py', . ] # 👇️ check if file in current directory print('example-file.txt' in contents) # 👉️ False
The os.getcwd method returns a string that represents the current working directory.
The os.listdir method returns a list that contains the names of the entries in the directory of the specified path.
The code sample prints the contents of the current working directory.
If you don’t see the file you are trying to open in the list, you shouldn’t try to open the file with a relative path (e.g. example.txt ).
Instead, you should use an absolute path (e.g. r’C:\Users\Alice\Desktop\my-file.txt’ ).
We used the in operator to check if a file with the specified name exists.
# Creating a file with the specified name if it doesn’t exist
You can use this approach to create a file with the specified name if it doesn’t already exist.
Copied!import os current_directory = os.getcwd() contents = os.listdir(current_directory) filename = 'example.txt' if filename in contents: with open(filename, 'r', encoding='utf-8') as f: lines = f.readlines() print(lines) else: with open(filename, 'w', encoding='utf-8') as my_file: my_file.write('first line' + '\n') my_file.write('second line' + '\n') my_file.write('third line' + '\n')
We used the in operator to check if the file exists.
If it doesn’t exist, the else block runs where we create a file with the same name, adding 3 lines to it.
If you need to create the file name using variables, check out the following article.
# Make sure you have specified the correct filename
Make sure a file with the specified name exists and you haven’t misspelled the file’s name.
The name of the file shouldn’t contain any special characters, e.g. backslashes \ , forward slashes / or spaces.
If you need to generate unique file names, click on the following article.
# Changing to the directory that contains the file
An alternative solution is to change to the directory that contains the file you are trying to open using the os.chdir() method.
Copied!import os dir_containing_file = r'/home/borislav/Desktop/bobbyhadz_python' # 👇️ change to the directory containing the file os.chdir(dir_containing_file) file_name = 'example.txt' with open(file_name, 'r', encoding='utf-8') as f: lines = f.readlines() print(lines)
The os.chdir method allows us to change the current working directory to the specified path.
Notice that I passed an absolute path to the method.
The example above assumes that there is an example.txt file in the /home/borislav/Desktop/bobbyhadz_python directory.
Once we use the os.chdir() method to change to the directory that contains the file, we can pass the filename directory to the open() function.
# Things to node when debugging
Make sure to specify the extension of the file. Note that Windows doesn’t display file extensions.
If your path contains backslashes, make sure to prefix it with an r to mark it as a raw string.
Copied!my_path = r'C:\Users\Alice\Desktop\my-file.txt' print(my_path) # 👉️ C:\Users\Alice\Desktop\my-file.txt