Открытый модуль Python os открывает выше существующий каталог с относительным путем
Документация для модуля ОС, похоже, не содержит информации о том, как открыть файл, который не находится в подкаталоге или в текущем каталоге, в котором работает script, без полного пути. Моя структура каталогов выглядит следующим образом.
/home/matt/project/dir1/cgi-bin/script.py
/home/matt/project/fileIwantToOpen.txt
open("../../fileIwantToOpen.txt","r")
Дает ошибку файла, не найденную. Но если я запустил интерпретатор python в каталоге cgi-bin и попробую open("../../fileIwantToOpen.txt","r")
, он будет работать. Я не хочу жестко кодировать полный путь по очевидным причинам мобильности. Есть ли в модуле ОС набор методов, которые МОГУТ это сделать?
Ответы
Ответ 1
Путь к open
должен относиться к текущему рабочему каталогу, директорию, из которой вы запускаете script. Таким образом, приведенный выше пример будет работать, только если вы запустите его из каталога cgi-bin.
Простым решением было бы сделать ваш путь относительно script. Одно из возможных решений.
from os import path
basepath = path.dirname(__file__)
filepath = path.abspath(path.join(basepath, "..", "..", "fileIwantToOpen.txt"))
f = open(filepath, "r")
Таким образом вы получите путь к script, который вы используете (базовый путь), и присоедините его к относительному пути файла, который вы хотите открыть. os.path
позаботится о деталях объединения двух путей.
Ответ 2
Это должно переместить вас в каталог, в котором находится script, если вы там еще не находитесь:
file_path = os.path.dirname(__file__)
if file_path != "":
os.chdir(file_path)
open("../../fileIwantToOpen.txt","r")