Я использовал для открытия файлов, которые были в том же каталоге, что и текущий Python script, просто используя команду типа
open("Some file.txt", "r")
Однако я обнаружил, что когда script был запущен в Windows, дважды щелкнув его, он попытается открыть файл из неправильного каталога.
С тех пор я использовал команду формы
open(os.path.join(sys.path[0], "Some file.txt"), "r")
всякий раз, когда я хотел открыть файл. Это работает для моего конкретного использования, но я не уверен, что sys.path[0]
может потерпеть неудачу в некоторых других случаях использования.
Итак, мой вопрос: какой лучший и надежный способ открыть файл, который находится в том же каталоге, что и текущий Python script?
Вот что мне удалось выяснить до сих пор:
-
os.getcwd()
иos.path.abspath('')
верните "текущий рабочий каталог", а не каталог script. -
os.path.dirname(sys.argv[0])
иos.path.dirname(__file__)
вернуть путь, используемый для вызова script, который может быть относительным или даже пустым (если script находится в cwd). Кроме того,__file__
не существует, когда script выполняется в IDLE или PythonWin. -
sys.path[0]
иos.path.abspath(os.path.dirname(sys.argv[0]))
, похоже, возвращают каталог script. Я не уверен, есть ли разница между этими двумя.
Edit:
Я просто понял, что то, что я хочу сделать, лучше описать как "открыть файл в том же каталоге, что и содержащий модуль". Другими словами, если я импортирую модуль, я написал, что в другом каталоге, и этот модуль открывает файл, я хочу, чтобы он искал файл в каталоге модуля. Я не думаю, что все, что я нашел, может это сделать...