I used to open files that were in the same directory as the currently running Python script by simply using a command like:
open("Some file.txt", "r")
However, I discovered that when the script was run in Windows by double-clicking it, it would try to open the file from the wrong directory.
Since then I've used a command of the form
open(os.path.join(sys.path[0], "Some file.txt"), "r")
whenever I wanted to open a file. This works for my particular usage, but I'm not sure if sys.path[0] might fail in some other use case.
So my question is: What is the best and most reliable way to open a file that's in the same directory as the currently running Python script?
Here's what I've been able to figure out so far:
- os.getcwd()and- os.path.abspath('')return the "current working directory", not the script directory.
- os.path.dirname(sys.argv[0])and- os.path.dirname(__file__)return the path used to call the script, which may be relative or even blank (if the script is in the cwd). Also,- __file__does not exist when the script is run in IDLE or PythonWin.
- sys.path[0]and- os.path.abspath(os.path.dirname(sys.argv[0]))seem to return the script directory. I'm not sure if there's any difference between these two.
Edit:
I just realized that what I want to do would be better described as "open a file in the same directory as the containing module". In other words, if I import a module I wrote that's in another directory, and that module opens a file, I want it to look for the file in the module's directory. I don't think anything I've found is able to do that...
 
     
     
     
     
     
     
     
     
     
     
     
    