Ответ 1
Функция open
работает относительно текущего рабочего каталога процесса, а не модуля, из которого он вызван. Если путь должен относиться к модулю, сделайте следующее:
import os.path
f = open(os.path.dirname(__file__) + '/../data.yml')
Как открыть файл в родительском каталоге в 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.
Есть ли для этого работа?
Функция open
работает относительно текущего рабочего каталога процесса, а не модуля, из которого он вызван. Если путь должен относиться к модулю, сделайте следующее:
import os.path
f = open(os.path.dirname(__file__) + '/../data.yml')
Встретив этот вопрос и не удовлетворившись ответом, я столкнулся с другим решением. Чтобы получить то, что я хотел, потребовалось следующее.
Определите текущий каталог с помощью 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')