Как открыть файл в родительском каталоге в python в AppEngine?

Как открыть файл в родительском каталоге в python в AppEngine?

У меня есть файловый модуль python/mod.py со следующим кодом

f = open('../data.yml')
z = yaml.load(f)
f.close()

data.yml находится в родительском каталоге модуля. Ошибка, которую я получаю, это

IOError: [Errno 13] file not accessible: '../data.yml'

Я использую AppEngine SDK 1.3.3.

Есть ли для этого работа?

Ответ 1

Функция open работает относительно текущего рабочего каталога процесса, а не модуля, из которого он вызван. Если путь должен относиться к модулю, сделайте следующее:

import os.path
f = open(os.path.dirname(__file__) + '/../data.yml')

Ответ 2

Встретив этот вопрос и не удовлетворившись ответом, я столкнулся с другим решением. Чтобы получить то, что я хотел, потребовалось следующее.

  • Определите текущий каталог с помощью os.path.dirname:

    current_directory = os.path.dirname(__file__)

  • Определите родительский каталог с помощью os.path.split:

    parent_directory = os.path.split(current_directory)[0] # Repeat as needed

  • Присоединяйтесь к родительскому каталогу с любыми подкаталогами:

    file_path = os.path.join(parent_directory, 'path', 'to', 'file')

  • Откройте файл:

    open(file_path)

Комбинированные вместе:

open(os.path.join(os.path.split(os.path.dirname(__file__))[0], 'path', 'to', 'file')