I have a folder with ten files in it which I want to loop through. When I print out the name of the file my code works fine:
import os
indir = '/home/des/test'
for root, dirs, filenames in os.walk(indir):
for f in filenames:
print(f)
Which prints:
1
2
3
4
5
6
7
8
9
10
But if I try to open the file in the loop I get an IO error:
import os
indir = '/home/des/test'
for root, dirs, filenames in os.walk(indir):
for f in filenames:
log = open(f, 'r')
Traceback (most recent call last):
File "/home/des/my_python_progs/loop_over_dir.py", line 6, in <module>
log = open(f, 'r')
IOError: [Errno 2] No such file or directory: '1'
>>>
Do I need to pass the full path of the file even inside the loop to open() them?
Yes, you need the full path.
Is the quick fix. As the comment pointed out,
os.walkdecends into subdirs so you do need to use the current directory root rather thanindiras the base for the path join.