Подтвердить что ты не робот

Открытый модуль 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"), он будет работать. Я не хочу жестко кодировать полный путь по очевидным причинам мобильности. Есть ли в модуле ОС набор методов, которые МОГУТ это сделать?

4b9b3361

Ответ 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")