Модуль Python OS открывает файл над текущей директорией с относительным путем - PullRequest
15 голосов
/ 08 декабря 2010

Документация для модуля ОС, по-видимому, не содержит информации о том, как открыть файл, который находится не в подкаталоге, или в текущем каталоге, в котором выполняется скрипт без полного пути. Моя структура каталогов выглядит следующим образом.

/home/matt/project/dir1/cgi-bin/script.py
/home/matt/project/fileIwantToOpen.txt

open("../../fileIwantToOpen.txt","r")

Дает файл не найдена ошибка. Но если я запускаю интерпретатор python в каталоге cgi-bin и пытаюсь open("../../fileIwantToOpen.txt","r"), это работает. Я не хочу жестко писать полный путь по очевидным причинам переносимости. Есть ли в модуле ОС набор методов, которые CAN делают это?

Ответы [ 2 ]

42 голосов
/ 08 декабря 2010

Путь к open должен быть относительно текущего рабочего каталога, каталога, из которого вы запускаете скрипт. Поэтому приведенный выше пример будет работать, только если вы запустите его из каталога cgi-bin.

Простым решением было бы указать путь относительно сценария. Одно из возможных решений.

from os import path

basepath = path.dirname(__file__)
filepath = path.abspath(path.join(basepath, "..", "..", "fileIwantToOpen.txt"))
f = open(filepath, "r")

Таким образом, вы получите путь к скрипту, который вы запускаете (basepath) и присоедините его к относительному пути файла, который вы хотите открыть. os.path позаботится о деталях соединения двух путей.

4 голосов
/ 08 декабря 2010

Это должно переместить вас в каталог, где находится скрипт, если вы еще не там:

file_path = os.path.dirname(__file__)
if file_path != "":
    os.chdir(file_path)
open("../../fileIwantToOpen.txt","r")
...