Python can't open file "No such file or directory"

Viewed 21003
def main():
    fh = open('lines.txt')
    for line in fh.readlines():
        print(line)

if __name__ == "__main__": main()

Directory files

enter image description here

I am on for-working.py file, and am trying to access the lines.txt file within the same working directory. But I get error

No such file or directory: 'lines.txt'

Does python need to have an absolute path when opening files?

why doesn't this relative path work here?

Running python 3.6

EDIT ^1 I'm running visualstudio code with the python package extension by Don Jayamanne, and "Code Runner" package to compile/execute python code

EDIT ^2 Full error:

Traceback (most recent call last):
  File "c:\www\Ex_Files_Python_3_EssT(1)\Ex_Files_Python_3_EssT\Exercise Files\07 Loops\for-working.py", line 11, in <module>
    if __name__ == "__main__": main()
  File "c:\www\Ex_Files_Python_3_EssT(1)\Ex_Files_Python_3_EssT\Exercise Files\07 Loops\for-working.py", line 7, in main
    fh = open('lines.txt', 'r')
FileNotFoundError: [Errno 2] No such file or directory: 'lines.txt'

EDIT ^3 checking sys.path

import sys
print(sys.path)

produces this information:

['c:\\www\\Ex_Files_Python_3_EssT(1)\\Ex_Files_Python_3_EssT\\Exercise Files\\07 Loops', 
'C:\\Users\\Kagerjay\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip', 'C:\\Users\\Kagerjay\\AppData\\Local\\Programs\\Python\\Python36\\DLLs', 'C:\\Users\\Kagerjay\\AppData\\Local\\Programs\\Python\\Python36\\lib', 'C:\\Users\\Kagerjay\\AppData\\Local\\Programs\\Python\\Python36', 'C:\\Users\\Kagerjay\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages']

EDIT ^4 checking os.getcwd()

Running

import os
print(os.getcwd())

Produces

c:\www\Ex_Files_Python_3_EssT(1)\Ex_Files_Python_3_EssT\Exercise Files

Well its definitely not in the right subdirectory (needs to cd 07 loops folder, that narrows the issue down

EDIT ^5 what is in lines.txt file

My lines.txt file i am opening looks like this. No extra whitespace or anything at start

01 This is a line of text
02 This is a line of text
03 This is a line of text
04 This is a line of text
05 This is a line of text

IN SUMMARY

Visual studio code's Code runner extension needs to be tweaked slightly to open files within a subdirectory so any of the below answers would provide a more robust solution to be independent of any extension / dependencies with the IDE

import os
print(os.getcwd())

Is most useful for diagnosing problem to the current directory python interpreter sees

4 Answers

I faced the same trouble today. The solution was outside the code, in the environment.

Shows the picture of VSCode settings editor

Command prompt in VSCode opens with the directory where VSCode executable is placed. When you execute the code, Python is searching for the file in the location where the VSCode executable is located.

This setting can be changed to the directory that you are working in(shown in figure). So when you are running the code in yourprog.py file, the interpretor is started in your working directory.

Then the VScode runner will do the way you are thinking.

Related