如何在AppEngine的python中打开父目录中的文件?
我有一个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。
有解决方法吗?
答案 0 :(得分:23)
open
函数相对于当前进程工作目录而不是从其调用的模块进行操作。如果路径必须是模块相关的,请执行以下操作:
import os.path
f = open(os.path.dirname(__file__) + '/../data.yml')
答案 1 :(得分:3)
遇到这个问题但对答案不满意,我遇到了另一种解决方案。它采取了以下措施来获得我想要的东西。
使用os.path.dirname
确定当前目录:
current_directory = os.path.dirname(__file__)
使用os.path.split
确定父目录:
parent_directory = os.path.split(current_directory)[0] # Repeat as needed
将parent_directory加入任何子目录:
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')
答案 2 :(得分:1)
?? 替代方案 ??
您还可以使用 sys
模块获取当前工作目录。
因此,做同样事情的另一种选择是:
import sys
f = open(sys.path[0] + '/../data.yml')