1
votes

I have a small issue with a python program that I wrote to extract some information from a special text file. The loop (code below) needs to execute my function extract_zcoords() over 500 files (1 file gives one list) so that I can build a dataset.

import os

def extract_zcoord(filename): 
    f = open(filename, 'r')         
    ... # do something with f


### LOOP OVER DIRECTORY 
location = '/Users/spyros/Desktop/3NY8MODELSHUMAN/HomologyModels' 

for filename in os.listdir(location):
    extract_zcoord(filename) 

THE ERROR: The IOException No such file or directory is the one that occurs, so for some reason python is not accessing the files. I have checked directory pathname (location) and file permissions, and they are correct (read+write). Any ideas why an IOError would be reported when the files do exist and pathname is correct?

Any ideas what might be wrong?

2
Can anyone think of a reason not to always use raw strings when specifying paths? Is there a downside to doing this? (not suggesting this as a cause of the problem, just got me thinking about minimizing potential problems with paths etc) - Levon

2 Answers

2
votes

You need to join the dirname and filename into one complete path:

location = '/Users/spyros/Desktop/3NY8MODELSHUMAN/HomologyModels' 
for filename in os.listdir(location):
    filename = os.path.join(location, filename)
5
votes

Probably, you should use os.path.join when you call

zdata.extend(extract_zcoord(filename))

like this:

zdata.extend(extract_zcoord(os.path.join(location, filename)))