2010-05-02 5 views
11

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

У меня есть питон файл модуль/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.

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

ответ

19

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

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

На моем взгляде, было бы лучше, если бы вместо конкатенации файла , вы использовали «os.path.join» Например: open (os.path.join (os.path.dirname (__ file__), os.pardir, 'data.yml')) – ThatsAMorais

+0

Да. Но обязательно используйте \ __ файл \ __ вместо файла – sthiers

+0

. Кроме того, обязательно верните «код» в обратные кавычки. –

3

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

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

    current_directory = os.path.dirname(__file__)

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

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

  3. Регистрация parent_directory с любыми подкаталогов:

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

  4. Открыть файл:

    open(file_path)

Объединенных вместе:

open(os.path.join(os.path.split(os.path.dirname(__file__))[0], 'path', 'to', 'file') 
Смежные вопросы