There are two directories on my desktop, DIR1 and DIR2 which contain the following files:
DIR1: file1.py DIR2: file2.py myfile.txt The files contain the following:
import sys sys.path.append('.') sys.path.append('../DIR2') import file2 import sys sys.path.append( '.' ) sys.path.append( '../DIR2' ) MY_FILE = "myfile.txt" myfile = open(MY_FILE) some text Now, there are two scenarios. The first works, the second gives an error.
I cd into DIR2 and run file2.py and it runs no problem.
I cd into DIR1 and run file1.py and it throws an error:
Traceback (most recent call last): File "<absolute-path>/DIR1/file1.py", line 6, in <module> import file2 File "../DIR2/file2.py", line 9, in <module> myfile = open(MY_FILE) IOError: [Errno 2] No such file or directory: 'myfile.txt' However, this makes no sense to me, since I have appended the path to file1.py using the command sys.path.append('../DIR2').
Why does this happen when file1.py, when file2.py is in the same directory as myfile.txt yet it throws an error? Thank you.
You can create a path relative to a module by using a module's __file__ attribute. For example:
myfile = open(os.path.join( os.path.dirname(__file__), MY_FILE)) This should do what you want regardless of where you start your script.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With