loop through folder in python and open files throws an error

Using os.listdir(...) only returns the filenames of the directory you passed, but not the full path to the files. You need to include the relative directory path as well when opening the file.

basepath = "pathtodir/DataFiles/"
for filename in os.listdir(basepath):
    if filename.endswith(".log"): 
        print(os.path.join("./DataFiles", filename))

        with open(basepath + filename) as openfile:    
            for line in openfile:
            ........

os.listdir() gives you only the filename, but not the path to the file:

import os

for filename in os.listdir('path/to/dir'):
    if filename.endswith('.log'):
        with open(os.path.join('path/to/dir', filename)) as f:
            content = f.read()

Alternatively, you could use the glob module. The glob.glob() function allows you to filter files using a pattern:

import os
import glob

for filepath in glob.glob(os.path.join('path/to/dir', '*.log')):
    with open(filepath) as f:
        content = f.read()

Tags:

Python