I was trying to iterate over the files in a directory like this:
import os
path = r'E:/somedir'
for filename in os.listdir(path):
f = open(filename, 'r')
... # process the file
But Python was throwing FileNotFoundError
even though the file exists:
Traceback (most recent call last):
File "E:/ADMTM/TestT.py", line 6, in <module>
f = open(filename, 'r')
FileNotFoundError: [Errno 2] No such file or directory: 'foo.txt'
So what is wrong here?
os.listdir(directory)
returns a list of file names indirectory
. So unlessdirectory
is your current working directory, you need to join those file names with the actual directory to get a proper absolute path:It is because
os.listdir
does not return the full path to the file, only the filename part; that is'foo.txt'
, when open would want'E:/somedir/foo.txt'
because the file does not exist in the current directory.Use
os.path.join
to prepend the directory to your filename:(Also, you are not closing the file; the
with
block will take care of it automatically).